본문 바로가기

JAVA/요점정리15

Spring AOP @Aspect를 활용하여 Logging 기능을 적용해보자. 서론 이 포스팅은 배움을 토대로 실제 개발중인 프로젝트에 Spring AOP를 사용한 로깅 기능을 어떻게 구현했는지에 대한 내용입니다. 그리고 그 배움은 김영한 선생님의 '스프링 핵심원리 - 고급편' 강좌를 참고하였습니다. 목표 구현하고자 한 기능은 다음과 같습니다.호출한 메소드를 계층 별 순서에 맞게 화살표와 띄어쓰기를 통해 구분한다.계층 별 메소드 호출 시작부터 종료까지의 시간을 구한다.메소드 파라미터를 함께 표시한다.hibernate 구현 쿼리문을 출력한다.예외 발생 시 별도 표시와 함께 예외 메시지를 출력한다.log의 형태는 다음과 같다.INFO 12-16 17:29:18 [788ecafc] |--> WorkPlanController.getWorkPlanList(WorkPlanSearch(stDa.. 2025. 1. 10.
[Spring] ControllerAdvice, ExceptionHandler, static factory method pattern을 사용하여 예외 처리하기 사설더보기인프런에서 김영한 선생님이 강의에서 종종 해주시는 말씀이 있다. 고객을 편하게 하려면 개발자가 불편해야 한다. 스프링 강의를 듣고 있으면 스프링을 사용하고 있는 내(고객)가 편하게 개발할 수 있게 스프링을 개발한 개발자들이 정말 많이 신경써서 개발했다는 것을 느낄 수 있다. 현재 새로운 프로젝트의 구조를 세우고 있는 상황인 나(개발자)도 어떻게 하면 개발자(고객)가 이 구조 안에서 더 편하게 개발을 할 수 있을까에 대해 고민하게 된다. 그리고 그 중 하나가 예외처리이다. 우리는 웹 안에서 발생하는 다양한 상황에 맞는 예외를 구현해야 한다. 그것을 좀 더 간편하게 하기 위해 스태틱 팩토리 메서드 패턴을 사용하여 구현해보고자 한다. 배경 예외처리는 현재 다음과 같이 만들어져 있다.@Getter@Al.. 2024. 12. 8.
[Spring] MapStruct 라이브러리 사용해서 dto to entity 매핑 간단화시키기 배경 새로 프로젝트를 제작하게 되었습니다. 레이어드 아키텍처 기반이며 계층 간의 모듈화를 좀 더 엄격하게 관리하고 싶어 dto와 entity를 별도로 관리하게 되었습니다. 기존에는 빌더 패턴을 통해 각각의 값들을 매핑해주었습니다. @Controllerpublic class ExController {... @PostMapping("/testUrl")    @ResponseBody    public List getWorkPlanList(@RequestBody TestSearch testSearch) {        List testList = testService.findSpYjSelect(testSearch);        return getTestListEntityToDto(testList);    } .. 2024. 11. 18.
CopyOnWriteArrayList vs SynchronizedList 개요 채팅 프로그램을 만들 때 유저 세션정보를 저장하는 리스트에 대해 동시성 문제를 고민했습니다. 동시에 두 유저가 접속했을때 동기화가 되지 않으면 한명의 유저가 리스트에 정상적으로 등록되지 않을 가능성이 있기 때문입니다.이를 스레드 안전성이라 합니다. ArrayList에 동시에 두 스레드가 접근하게 되면 스레드 안전하지 않은 상태가 됩니다.동기화는 이를 방지하기 위해 한 자원에 하나의 스레드만 접근할 수 있게 해줍니다. 그래서 동기화를 지원하는 리스트에 대해 알아봤습니다. CopyOnWriteArrayList 값을 변경할때 내부의 값을 복사해서 복사본을 통해 변경합니다.public boolean add(E e) { synchronized (lock) { Object[] .. 2024. 9. 29.
헥사고날 아키텍처를 사용한 스프링 부트 로그인 API 구현해보기 목적 클린 아키텍처라는 책을 읽으면서 프로젝트의 아키텍처 자체에 관심을 가지게 되었습니다. 저자가 제시한 클린 아키텍처는 이론적인 의미는 이해하였으나 구현 방향에 대한 갈피를 잡지 못했습니다. 그러다 헥사고날 아키텍처에 대해 알게 되었습니다. 클린 아키텍처에서 제시한 핵심 정책의 분리에 대한 원칙을 지키고 있으며 좀 더 실무에서 유용하게 사용하고 있다는 사실을 알고 직접 구현해보며 이해하고 싶었습니다. 그래서 흔한 기능 중 하나인 로그인에 대해 헥사고날 아키텍처로 설계해 보았습니다. 직접 설계해보며 느낀점에 대해 포스팅 해볼까 합니다. 프로젝트 구조프로젝트 구조는 그림과 함께 보면 이해가 쉬울거라 생각해서 같이 가져왔습니다.각 계층에 대해 살펴보자면, Adapter각 핵심 로직과 외부를 연결하는 계층입니.. 2024. 7. 12.
구글 클라우드(GKE), 쿠버네티스, 도커 사용하여 스프링부트 프로젝트 배포하기(맥os M3 기준) 들어가며 개념 설명보다는 제가 진행했던 부분 위주로 복기하며 포스팅을 해보려 합니다. 기본 스프링부트 프로젝트에 테스트용 restAPI 만든 뒤 도커용 이미지를 생성하고 쿠버네티스에 배포하여 클라우드 환경을 구성하는 과정입니다. 원래 제로에서 시작하면 설정을 하나하나 만져줘야 해서 더 어렵다고 하는데 저는 구글에서 제공하는 엔진을 사용하였기 때문에 어느정도 난이도는 내려가지 않았나 생각합니다. 처음 실습하시는 분들께도 3개월 무료 체험판(?)을 제공하기 때문에 무리없이 구현이 가능합니다.  GKE  https://cloud.google.com/kubernetes-engine?hl=ko cloud.google.com 해당 홈페이지에 접속하여 구글 클라우드에 회원가입 해줍니다. 회사 메일로 하면 회사 프로젝.. 2024. 7. 4.