전체 글 205

[Spring] Jasypt를 이용하여 코드 암호화하기

배경회사에서 새로 진행되는 프로젝트에 인증서를 적용하기 위해 yml에 인증서 정보를 적어둬야한다.그런데, yml 파일에 인증서의 비밀번호를 그대로 노출시키기가 꺼려졌다.깃헙을 이용하는 것이 아니라 secret key도 사용할 수 없으니, 해당 비밀번호를 암호화해서 저장해야겠다고 생각했고, 찾아보던 중 Jasypt라는 라이브러리를 알게 되었다.   적용    1. build.gradle에 import하기implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'참고로 자바는 jdk 17을 사용 중이고, springboot는 3.2.11버전이다.    2. JasyptConfig.java 클래스 작성하기Jasypt를 사용하기 위해서는 ..

Spring 2024.11.20

The server selected protocol version TLS10 is not accepted by client preferences

회사에서 MsSQL을 TMS 전용 DB로 사용하고 있는데, 과거에는 자바 프로젝트를 사용하지 않고 Visual Basic으로 진행하여 큰 문제가 없었다.이번 기회에 vb로 작성된 코드들을 자바로 옮기기로 하였고, 그 과정에서 TMS에 데이터를 삽입하는 과정에서 아래의 오류가 터졌다.Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12] at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) at java.base/sun.security..

Error Record 2024.11.20

[Spring] AttributeConverter를 사용해 원하는 포맷으로 저장하기

DB에 LocalDate나 LocalTime 혹은 LocalDateTime을 원하는 형식으로 넣을 수는 없을까?LocalTime은 HH:mm:ss 형식으로 저장된다.하지만, 이를 ms 단위까지 저장하고 싶다면? 이를 위해 필요한 AttributeConverter를 소개한다.   AttributeConverterAttributeConverter는 DB에 저장될 때의 형식을 지정할 수 있게 해준다.해당 인터페이스는 2개의 메서드 구현을 요구한다. 1. convertToDatabaseColumn말그대로, DB에 저장할 때를 의미한다.우리가 LocalTime을 HH:mm:ss.SSS방식으로 저장하고자 한다면 아래와 같이 작성할 수 있다. private static final DateTimeFormatter..

Spring 2024.11.20

[글쓰기 클럽 1기] 4. 내가 프로젝트에서 제일 중요하게 생각하는 것

최근 감사하게 1차 서류를 합격한 곳이 있어 면접을 보러 갔다. 면접을 준비하는 중에 빼놓을 수 없는 질문이 바로 프로젝트에서 힘들었던 점이나 프로젝트에서 중요한 것이라고 생각한다. 실제 면접 준비를 하면서 이 질문에 대해 생각해보았을 때, 답이 나오기까지 오랜 시간이 걸리지 않았다. 뭔가 지금까지 개발 프로젝트를 포함해서 모든 팀 프로젝트를 진행하며 느낀 점이 있었기 때문이다. 나에게 있어서 프로젝트에서는 소통이 중요하다. 팀원들끼리 서로에 대한 불만이 없어야하고, 이 프로젝트에 대해서 불만이 없어야한다. 과거 이런 경험이 존재했고 이를 통해서 느낀 점이다.  내가 진행했던 프로젝트 중에서 팀원 한명이 자신에게 주어진 할당량을 해오지 않았던 경우가 있었다. 이유가 조금 당황스러웠는데..

기타 2024.04.24

[글쓰기 클럽 1기] 3. 나에게.. 클린 코드란..?

최근 좋은 기회로 우테캠 7기 과제테스트를 볼 수 있는 기회가 주어졌다. 1차 코딩테스트와 다르게 과제테스트는 문제에서 요구하는 API 개발을 하는 것으로 정말 실무와 연관된 실력을 엿볼 수 있는 기회라고 생각한다. 그동안은 '작동하기만 하면 됐지' 라는 마인드가 조금 컸던 것 같다. 프로젝트에서도 어차피 내가 맡은 부분은 내가 유지보수하는 경우가 대다수였으니까.. 이쁘고 깔끔하게 짜려고 생각하지는 않았던 것 같다.  하지만 이번 과제테스트를 준비하면서 '객체지향이란 무엇인가'와 같은 조금 체계적인 설계에 대한 고민이 많아진 것 같다. '어떻게 해야 메서드가 하나의 기능을 하지..?', '어떻게 해야 확장성이 좋아질까'처럼.. 그러다보니 자연스레 다른 사람들의 코드를 보았다. 어떤게 클린코드..

기타 2024.04.24

[글쓰기 클럽 1기] 2. 자바의 특징 중 내가 가장 좋아하는 특징

내가 좋아하는 언어는 단연 자바다. 백엔드 개발자에 관심을 갖기 전부터도 그랬고 현재도 마찬가지다.(사실 지금은 이제 할 줄 아는 언어가 자바밖에 없는 것 같기도..) 그 시절(개발자에 대한 꿈이 없을 때)에는 자바의 캡슐화, 상속, 추상화, 다형성(a.k.a 캡상추다) 이 어렵기만 했다. 그런데도 왜 자바를 좋아했냐고?? 어려움 속에서의 놀라움이 있었기 때문이다. 가장 먼저 파이썬으로 언어를 시작했던 나는 너무 쉬웠다. 지금보면 내가 좁은 시야로 보았기에 쉬웠지만.. 자바에 비해 쉬운건 사실이다. 그렇게 프로그래밍 언어를 배우고 컴퓨터공학과에 들어왔을 때 자바를 입문했었다. 파이썬보다 코드짜기가 어려웠으며.. List를 배우기 전까지 배열로 사용해야해서 참 애를 먹었다. 자바로 알고리즘을 짜다보면 파이..

기타 2024.04.15

[글쓰기 클럽 1기] 1. 나는 왜 개발자가 되고싶은가?

SW 아카데미에서 뵈었던 김송아 강사님의 언그래머 슬랙에 어쩌다보니 참여하게 되었다. 매주 아티클을 올려주시는 것만으로도 정말 감사하게 트렌드를 따라가고 있었는데.. 이번에 글쓰기 클럽을 모집한다고 하였는데, 마침 졸업하고 나니 글도 쓰기 귀찮아지고.. 그래서 다시 마음가짐한다고 생각하고 신청했다. 그래서 이번 주제는.. ‘나는 왜 개발자가 되고싶은가?’이다. 우선 나는 개발을 접한지 얼마 되지 않았다. 학부에서 배우는 것들인 알고리즘, 시스템 프로그래밍들은 ‘개발’에 초점이 맞춰져있다기 보다는 근본적인 컴퓨터에 대한 지식인 CS 지식의 학습에 초점이 있는 듯 하다. 그래서 실제 개발이라는 분야를 늦게 접했다. 학부 수업과 학점을 꽤나 중요하게 생각했던 나는 개발은 졸업 프로젝트 때 할거니까~ 라는 마음..

기타 2024.04.13

ConcurrentModificationException이 발생하지 않는 경우

이펙티브 자바 Item 58에서는 for-each를 사용을 추천한다. 하지만 for-each를 사용할 수 없는 부분을 명시하고 있었다. for-each에서는 컬렉션의 원소를 수정할 수 없다고 한다. 이 또한 코딩테스트에서 나도 경험했던 부분이다. 그런데 스터디원이 자세한 예시를 요구하여, 코드를 작성했는데.. 어머나..?? 갑자기 삭제가 되는 것이다. 코드는 아래와 같다. 그런데 놀랍게도 예상하는 결과가 나왔다. 이펙티브 자바의 말에 의하면, 그리고 여러 사람들의 글에 의하면 이것은 불가능했어야했다. 처음에는 래퍼 클래스와 기본타입은 가능한가..?? 라는 생각도 했었지만, 너무 자기합리화로 끝내는 것 같아서 조금 더 정확하게 파고들고 싶었다.(개발자의 본성이랄까 ㅋㅅㅋ) 우선은 remove의 원리를 알고..

Error Record 2024.04.09

[RPM] 프로젝트 생성

프로젝트를 생성하고 엔티티의 골격만 짜보았다. 자바는 트렌드를 따라가기 위해 더이상 11을 사용하지 않고 17을 사용해보기로 했다. 스프링부트도 3.2버전으로 생성했다. 프론트가 없는 관계로 템플릿 엔진을 이용해야한다. 우리는 머스테치와 타임리프를 두고 고민하였다. 머스테치는 쉬운 문법이 강점이라고 하였지만, 현재 김영한 선생님의 강의를 듣고 있는데 자꾸 타임리프 칭찬을 하신다.. 아무리 봐도 문법이 쉬워보이지는 않은데 쉽다고 하신다... 우리도 타임리프로 하기로 했다. (줏대없어 ㅋㅅㅋ) DB는 국룰 mysql로 가지 않을까 싶긴하다. 개발용으로는 단연 h2. 앞선 글에서 변경된 erd를 소개했다. 정말 좋은 것 같아서 그 erd를 반영하여 골격을 세팅했다. 아직, 임베디드 타입의 적당한 패키지를 정하..