Development/Spring & Springboot 7

[기술면접 준비] 비전공자도 쉽게 이해하는 AOP

들어가며 스프링의 기술질문 주제로 단골로 등장하는 AOP. 개념은 잘 아는데 자세하게 설명하려고 하니 어렵다. 그래서 자주 나오는 질문과 질문의 답이 되는 코드를 작성해 보며 개념을 확실하게 머릿속에 넣기 위해 준비했다. 실제로 며칠 전 기술면접에서 AOP에 대한 질문을 받았는데 개념적으로 이해한다고 생각해 준비 없이 대답했다가 호되게 당했다. 이제부터 여러분과 나는 취준생이 되어 AOP에 대해 자세하게 알아보고 답을 정리해보자. Q. AOP는 무엇이고 왜 사용할까요? A. 관점지향 프로그래밍이란 뜻으로 OOP의 개념을 보완하기 위해 사용됩니다. 가령 모든 컨트롤러 요청의 파라미터를 로깅하고 싶을 때, 로깅이라는 기능이 중복될 수 있습니다. 이를 컨트롤러에 진입하기 전에 일괄적으로 처리해 줄 수 있다면 ..

[개발 Tip] Yaml, Properties 안에 중요한 정보를 암호화하기 feat. Jasypt 사용 방법

들어가며 며칠 전, Github에 토이 프로젝트 소스를 올렸더니, GitGuardian에서 *.yaml 파일에 계정 정보가 들어가 있다고 알려주었다. 단순히 파일만 삭제하고 커밋하면 git log를 통해 다시 확인할 수 있는 여지가 있어서 reset 후 gitignore에 *.yaml파일을 추가하여 재 커밋하였다. 이런 문제를 더 쉽게 해결할 수 있는 방법은 없을까 고민하다 프로퍼티 정보 암호화 방법을 찾게 되어 이렇게 공유한다. Jasypt란 무엇?? Java Simplified Encryption의 약자로, 자바로 간단히 암호화할 수 있게 도와주는 라이브러리다. 읽을 때는 '자시프트' 라고 발음하는 것 같다(유튜브 참고) 자세한 정보는 이곳을 참고하여 확인하면 된다. 그럼 바로 예제 코드를 살펴보자...

[Springboot] bootRun과 docker-compose 자동으로 함께 실행하기 feat. spring.profiles.active 기본값을 local로 변경

들어가며 필자는 로컬에서 개발한 코드를 개발서버나 운영서버에서 배포하기 위해 gradle의 bootRun을 사용한다. 이때에도 도커의 컨테이너가 죽어있다면 혹은 이미지조차 없다고 하더라도 자동으로 설치되고 실행되면 좋겠다는 생각이 들었다. 그래서 bootRun에 도커컴포즈 파일을 실행할 수 있도록 작업을 추가하였다. 뭐든 손이 덜 가야 편하니깐! bootRun 설정하기 먼저 아래 포스팅과 동일한 상태까지는 따라와야 된다. 이번 글은 여기까지 설정을 완료된 상태라고 가정하고 작성했다. [Intelli J] Springboot + docker-compose 자동으로 함께 실행하기 feat. Gradle plugin 추천 들어가며 토이 프로젝트 진행하면서 Kafka가 필요하여 docker-compose 파일을..

[Intelli J] Springboot + docker-compose 자동으로 함께 실행하기 feat. Gradle plugin 추천

들어가며 토이 프로젝트 진행하면서 Kafka가 필요하여 docker-compose 파일을 만들었다. 도커 컴포트 파일로 로컬 프로젝트를 실행할 때, 보통 아래와 같은 절차를 거친다. docker-compose Up을 하여 컨테이너를 실행한다. 스프링부트를실행한다. 근데 필자는 스프링부트를 실행할 때 자동으로 docker-compose 내에 명시된 컨테이너를 실행하고 싶었다. 왜냐? 터미널 들어가서 명령어 치는 게 귀찮았기 때문이다. docker-compose 자동으로 실행하기 적용하는 순서를 먼저 요약하면 다음과 같다. 기본적으로 각자에게 필요한 docker-compose 파일은 생성했다고 가정하고 진행하니 아직 docker-compose 파일이 없다면 먼저 준비해야 한다. 'com.palantir.do..

스프링에서 빌더 패턴 사용 시 주의사항 feat. 마이바티스에서 빌더 객체 오류

들어가며 빌더 패턴은 개인적으로 좋아하는 방식이다. 생성자는 필드 값이 길어지면 순서에 의존하는 경향이 강하고 자바 빈 방식은 데이터가 명확하게 세팅되지만 변경 가능하다는 단점이 있다. 빌더 패턴은 불변성 때문에 귀찮은 경우가 발생하지만, 위 두 가지 단점을 한 번에 해결할 수 있다. 그래서 이제는 다들 적극적으로 사용하고 있는 것 같다. 그럼 스프링 + Mybatis 환경에서 빌더를 적용하는 중 발생했던 오류를 보면서 무엇을 조심해야 하는지 살펴보자. 여기에는 Lombok 라이브러리를 사용했다. 문제 발생 상황 책의 제목을 변경하는 API를 개발한 BookRestController가 있다. 변경할 책의 ID와 변경하고자 하는 제목을 title 필드에 담아서 전달받는다. 기존에 잘 사용하던 기능이었으나 ..

Springboot에서 BCrypt 암호화(해시화) 구현하기 feat. 시큐리티 인증 없이 BCrypt 사용하기

들어가며 스프링 시큐리티를 공부하다가 만나게 된 BCrypt 알고리즘은 어떤 특징이 있나 살펴보기 위해 포스팅을 작성했다. 또한 예전에 기술면접에서 BCrypt에 대해 잘못된 대답을 했던 부끄러운 기억이 생각나서 '언젠가는 잘못 대답했던 내용을 만회하기 위해 정리해서 글을 써야지' 했던 다짐을 실천하는 이유도 있다. 그럼 BCrypt 방식에 대해 알아보고 어떻게 코드를 작성할 수 있는지 확인해보자. BCrypt 암호화란? 암호화 방식은 아래와 같이 구분할 수 있다. 먼저 복호화가 가능한지에 따라 양방향 / 단방향으로 구분되고, 복호화할 때 사용하는 비밀키가 암호화할 때 그대로 사용되면 대칭키, 서로 다른 키를 사용하면 비대칭키가 된다. BCrypt 알고리즘은 SHA 알고리즘과 마찬가지로 복호화 불가능하기..

Invalid character found in method name 오류 해결하기

들어가며 토이 프로젝트에 SSL 작업을 더해 HTTPS 프로토콜을 적용하고 테스트하는 과정에서 발생했다. 오류 발생 환경 [ 오류 발생 환경설정 ] Synology - Docker - Ubuntu JDK 8 keytool 명령어를 통해 생성한 Keystore application.yarml에 server.ssl 관련된 속성 설정 [ 변경한 환경설정 ] Synology - Docker - Ubuntu JDK 8 keytool 명령어를 통해 생성한 Keystore application.yarml에 server.ssl 관련된 속성 주석 오류 내용 및 원인 결론은 HTTPS 프로토콜이 준비가 안된 서버에 HTTPS 요청을 보낸 경우 java.lang.IllegalArgumentException: Invalid ..