Spring (10) 썸네일형 리스트형 [Spring Boot] 프로젝트 템플릿 만들기(6) - 후기 해당 템플릿을 만들고, 실제 프로젝트에 적용해서 사용해보았다. 직접 사용해보니 불편한 점이나 보완해야할 점이 여러 곳에서 보였다. 1. QueryDSL다소 높은 접근 난이도로 인한 유지보수성에 대한 우려 쿼리 DSL을 사용한 Join 쿼리 일부이다.@Overridepublic List get2dGraphData(long masterId, long processId) { QEMIScannerData emiScannerData = QEMIScannerData.eMIScannerData; QEMIHPrediction hPred = QEMIHPrediction.eMIHPrediction; QEMIVPrediction vPred = QEMIVPrediction.eMIVPrediction; .. [Spring Boot] 프로젝트 템플릿 만들기(5) - 인증 프로젝트를 수행할 때 마다 로그인 기능은 매번 필수적으로 들어가는 기능이였다.로그인 방식이 별도의 요청에 의해 변경되거나 oauth로 변경되지 않는 한, 인증 방식은 동일할 것으로 예상되었기 때문에 인증 과정도 템플릿에 포함하게 되었다. 쿠키 + Jwt 방식으로 인증을 구현했으며, 인증의 주체는 Spring Security 이다. 인증에 사용한 스택은 아래와 같다. - Spring Security 6.22- Jwt (Json Web Token) 토큰 검증 과정인증은 클라이언트가 서버로 요청을 보낼 시, Spring Security가 HTTP Header에 있는 Cookie를 가져와 토큰 검증을 수행한다. 만약 유효한 인증토큰이 아니라면 Controller로 요청이 전달되지 않고, 예외가 발생하여 클라.. [Spring Boot] 프로젝트 템플릿 만들기(4) - 공통 사용 클래스 공통으로 사용하는 클래스는 따로 모듈화하여 전역에서 사용할 수 있도록 설정했다. Constants.class// 프로젝트에 사용할 상수값 정의public class Constants { // COMMON public static final String API_RESPONSE_SUCCESSED = "SUCCESSED"; // Jwt public static final String AUTHORIZATION_HEADER = "Authorization"; public static final String REFRESH_HEADER = "Refresh"; public static final String BEARER_PREFIX = "Bearer "; public static f.. [Spring Boot] 프로젝트 템플릿 만들기(3) - 로깅 실무에서 디버깅을 수행할 때, 로그의 가독성이 디버깅 시간에 큰 영향을 준다는 것을 알게 되었다. 자주 접하게 되는 로그는 3종류가 있었다. 1. Spring boot 서버의 시스템 로그 (logback 이용)2. 디버깅 용으로 서버 소스 내에 붙여서 값을 확인하는 용도의 함수 (ex. system.out.println("~~~")3. DB 로그 3 종류의 로깅 설정을 모두 진행해보고, 좀 더 나은 가독성의 로그를 남겨 디버깅이 용이할 수 있도록 설정을 직접 진행해보았다. 4. API 호출별 로그 가독성을 높이기 위한 메서드 실행정보 로그 추가적으로 API 호출 별로 로그 단락이 구분되어야 파악이 쉬울거라는 판단이 들었고, AOP를 이용하여 각 메서드 실행 시 URL 호출 정보가 남도록 설정을 진행했다... [Spring Boot] 프로젝트 템플릿 만들기(2) - JPA 관련 세팅 SI 프로젝트 특성 상 Kick Off 전에 고객의 요구사항이 어떤 것이 있는지 분석하게 된다. 아직까지 내가 경험한 요구사항 중에서 서버의 기술 스택을 특별히 요구하는 경우는 없었던 것 같다. 그래서 초기 DB 를 설계할 때, 어떤 식으로 구성할지 개발자가 직접 선택할 수 있다는 장점이 있었다. 아직은 내가 프로젝트의 서버 구성을 리딩할 연차는 되지 않았기 때문에, 프리랜서의 내가 자주 사용하던 방법은 MySQL + JPA 조합의 DB 구성이였는데, 개발을 리딩하는 프리랜서 분들은 대부분 Mybatis를 사용하고 있었다. 두 개를 모두 경험해보면서 내가 편리하다고 느낀 것은 JPA 였다. SQL Mapper vs ORM 서버에서 DB로 쿼리를 작성해서 내보내기 위해서 2가지의 방법이 있다. SQL Ma.. [Spring Boot] 프로젝트 템플릿 만들기(0) 진행 배경 회사에서 프로젝트를 진행하면서 타인이 작성한 코드를 유지보수 하거나, 이미 잡혀있는 틀에 개발을 진행하는 경우가 많았다. 내가 직접 프로젝트의 틀을 잡지 않았다보니, 이해되지 않는 프로세스도 있고 비효율적이어서 아쉬운 부분도 있었다. SI 프로젝트 특성 상, Spring Boot 2.x, Mybatis, Maven 조합의 프로젝트가 대부분이었는데, 매년 더 좋은 기술이 출시되고 업계 점유율 1위를 자랑하던 기술들이 내리막 길을 걷는 것을 바라보며 나도 어쩌면 제 자리에 고여가는 것은 아닐까 우려되기도 했다. 따라서 가급적이면 신버전의 기술들을 토대로 나만의 프로젝트 템플릿을 만든다면 매번 개발 리소스를 낭비하지 않아도 되고, 좋은 공부가 될 것 같다는 생각이 들었다. Stack - Spring.. [Spring Boot] 프로젝트 템플릿 만들기(1) - 예외 처리 템플릿을 만들면서 가장 먼저 떠올린 개선점은 예외 처리이다. 프로젝트를 진행할 때 프론트와 협업하면서 어느 부분에서 에러가 발생했는지 명확하지 않아 코드를 매 번 분석해야하는 불편함이 있었다. 특히, 배포 환경에서는 서버의 로그를 바로 볼 수 없기 때문에 EC2 콘솔에 접속해서 스프링부트 서버를 재시작하여 콘솔에 뜨는 에러로그를 직접 보아야 디버깅이 가능했다. 이러한 번거로움을 없애기 위해서 세분화된 예외처리와 한 눈에 파악할 수 있는 로그 데이터의 필요성을 느꼈다. 먼저 예외처리를 좀 더 세분화하고, 뱉어지는 예외 메시지가 에러의 이유를 바로 짐작할 수 있도록 구성하고 싶었다. 또한, 매 번 반복적으로 작성해야하는 Try / Catch 문에서도 벗어나고 싶었다. 예외처리 예시 try { if (!Uti.. Spring AOP 회사에서 '스프링 프레임워크 첫걸음' 이라는 책을 소개 받아서 제대로 모르는 것들에 대해서 복습을 진행하고 있다. AOP의 개념에 대해서 혼동하고 있던 부분이 있어 다시금 학습 기록을 남겨두려고 한다. AOP란? AOP(Aspect Oriented Programming)은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화하는 것을 말하며, 어떤 로직에 공통된 관심사로 작성된 로직이 있다면 Aspect로 모듈화하여 재사용하는 것이다. @Aspect 어노테이션으로 해당 클래스가 Aspect임을 표시하고, @Component를 통해 빈에 등록한다. @Aspect @Component public class UseTimeAop { } 각 클래스 마다 중심적 관심사 (처.. 이전 1 2 다음