개발 177

[Spring 프로젝트] AOP Logging (Post 메서드의 Json Body 값 로깅하기)

Logging AOP - Json으로 들어온 Request Body값 로깅하기 테스트 하다보니 기존에 추가했었던 로깅 Aspect 에서는 Parameter값을 로깅하는 것만 추가했어서 Post 메서드에서 들어오는 json body값을 로깅하고 있지 않았다. 그러다보니 Post 메서드에서 body값에 들어온 것을 확인하려고 팀원이 직접 컨트롤러나 서비스단에서 로그를 찍고 있었던 것을 발견하게 되었고, 이 부분을 개선하기 위해 Logging Aspect에 추가해두어야 겠다는 생각을 하게되었다. 기존 Logging AOP 기존 로깅 자료 기존의 로그는 위 포스트에서 정리했었는데, LogAspect 파일에서 실제 로깅 하는 부분은 아래와 같았다. @Aspect @Component public class Logg..

개발/Spring 2020.12.04

[Spring 프로젝트] Mybatis에서 Insert, Update Batch 처리하기

Mybatis insert, update batch 처리하기 Mybatis에서 insert, update를 하면서 여러개를 한꺼번에 넣거나 업데이트 해야 하는 경우가 있다. 배치 처리를 하지 않고 서비스를 여러번 호출해서 하게 되면 두 세개야 금방 처리할 수 있지만, 넣어야 하는 값들이 커지면 서비스에서 소모되는 시간이 길어 감당이 안될 수 있다. 이 문서에서는 배치 처리를 해야 할 경우 mapper interface와 mapper xml파일을 어떻게 사용하면 되는지에 대해 설명한다. 1. Mapper Interface public interface StudyMaterialMapper { ... public void insert(StudyMaterial studyMaterial); public void ..

개발/Spring 2020.12.02

[Spring 프로젝트] Junit5 테스트 코드 작성하기 (Junit4와 차이점 정리)

Junit 5 테스트 코드 작성 가이드 해당 문서는 Junit 5 테스트 코드 작성 가이드에 관한 문서입니다. Junit 4와 Junit 5의 차이점을 알아보고 Junit5 유저 가이드를 공부하며 제대로 테스트코드를 작성하기 위해 만들어진 문서입니다. Junit 5 특징 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage Junit4가 단일 jar였던 것에 반해, Junit5는 Junit Platform, Junit Jupiter, Junit Vintage 모듈 세 가지로 구성되어 있습니다. Junit Platform JVM에서 동작하는 테스트 프레임워크입니다. 테스트를 발견하고 계획을 생성하고 결과를 보고하는 TestEngine 인터페이스를 정의합니다...

개발/Spring 2020.11.20

[Spring] 컴포넌트 스캔

Spring [Spring] 컴포넌트 스캔 자동 주입과 함께 사용하는 추가 기능이 컴포넌트 스캔이다. 컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있으므로 컴포넌트 스캔 기능을 사용하면 설정 코드가 크게 줄어든다. @Component 애노테이션으로 스캔 대상 지정 스프링이 검색해서 빈으로 등록할 수 있으려면 클래스에 @Component 애노테이션이 붙어야 한다. @Component 애노테이션은 해당 클래스를 스캔 대상으로 표시한다. @Component 애노테이션을 붙인 클래스만 컴포넌트 스캔 대상에 포함이 되는 것은 아니다. 다음 애노테이션을 붙인 클래스 또한 컴포넌트 스캔 대상에 포함된다. 아래 애노..

개발/Spring 2020.11.17

[Spring] 스프링 의존 자동 주입 (Auto Injection)이란?

Spring 스프링 의존 자동 주입 (Auto Injection) 앞에 Spring DI가 무엇인지 공부하며 Autowired의 사용법을 잠깐 살펴보았다. 이에 대해 더 자세히 알아보자. @Autowired 어노테이션을 이용한 의존 자동 주입 스프링에서 자동 주입을 설정하려면 @Autowired 어노테이션이나 @Resource 어노테이션을 사용하면 된다. Resource 어노테이션은 자바에서 제공하는 어노테이션으로 스프링은 @Resource 뿐만 아니라 자바에서 제공하는 @Inject 어노테이션 또한 지원한다. 단, 스프링에서는 주로 @Autowired를 사용하므로 해당 어노테이션에 관하여 자세히 다루어 보도록 하자. 자동 주입 기능을 사용하면 스프링이 알아서 의존 객체를 찾아서 주입한다. 자동 주입 기..

개발/Spring 2020.11.16

[Spring 프로젝트] 2. ERD 설계하기

Spring [스프링 프로젝트] 2. ERD 설계하기 해당 문서는 PMC 스프링 프로젝트에서 ERD를 설계하며 진행했던 내용을 정리한 문서입니다. 1. 기획에서 필요한 테이블과 컬럼 정리하기 우선 UX 설계한 내용과 기능 리스트를 보며 어떤 Entity가 필요할 지 생각해본다. 스터디 전에 각자 필요한 테이블과 컬럼들이 어떤 것이 있을지 생각해보고, 회의에서는 ERD Cloud라는 툴을 이용하여 온라인으로 바로 화면을 공유하며 테이블을 함께 설계했다. (집단지성의 힘) Study 제일 먼저 필요한 테이블은 Study 테이블. 어떤 스터디들이 있는지 리스트와 상세 목록을 볼 수 있는 페이지가 있고, 연결된 테이블들이 가장 많을 테이블이다. 필요한 컬럼에는 스터디 ID값과 제목, 정렬과 관리를 위한 데이터가..

개발/Spring 2020.11.16

[Spring 프로젝트] 1. 프로젝트 기획하기

Spring 프로젝트 기획하기 해당 문서는 PMC 스프링 프로젝트를 기획하며 진행했던 내용을 정리한 문서입니다. 1. 프로젝트 주제 선정하기 첫 스터디 모임. 첫 날은 간단히 스프링 프로젝트를 진행하면서 어떤 식으로 진행할 것인지에 대한 논의와 토이 프로젝트 주제를 선정했다. 주제는 회의하다가 15분간 생각해보고 그 자리에서 바로 어떤 주제로 하면 좋을지, 어떤 기능이 들어가면 좋을지를 대략적으로 생각해보고 공유했다. 첫 번째로 나온 주제는 카페 리뷰시스템으로, 대략적인 기능리스트는 아래와 같았다. 카페 쿠폰 발급 카페 별점 기능, 리뷰 기능 (사진/글 리뷰) 분위기 / 인스타용 / 스터디용 등의 그룹을 나누어 관리 가격정보를 1단계, 2단계, 3단계로 분류해서 보여주기 위치로 검색할 수 있는 기능 메뉴..

개발/Spring 2020.11.12

[Spring 프로젝트] Spring Boot에서 타임리프(Thymeleaf) 사용하기

Spring Spring Boot에서 타임리프(Thymeleaf) 사용하기 Spring Boot에서 타임리프를 사용하기 위해 타임리프가 무엇인지, 그리고 기본적으로 알아야 하는 타임리프의 속성이나 주요 식(expression)을 알아보자. 그리고 스프링 부트와 타임리프를 연동하려면 어떤 것을 해야 하는지에 알아보자. 타임리프(thymeleaf) 란? 타임리프(Thymeleaf)는 템플릿 엔진이다. 타임리프는 웹을 염두하고 설계해서 HTML 템플릿을 만들 때 적합합니다. 또한 자바 스크립트와 CSS에 적합한 템플릿 도 만들 수 있습니다. 다음은 타임리프가 제공하는 문법을 사용해서 작성한 템플릿의 예시 입니다. 환영합니다. [회원 가입하기] [로그인] 님, 환영합니다. [비밀번호 변경] [로그아웃] th:t..

개발/Spring 2020.11.12

[Spring 프로젝트] Spring에서 트랜잭션 사용하기

Spring에서 트랜잭션 사용하기 해당 문서는 Spring Boot 프로젝트에서 트랜젝션을 설정하여 롤백하는 방법에 대해 가이드한 문서입니다. 트랜잭션이란 트랜잭션이란 두 개 이상의 쿼리를 한 작업으로 실행해야 할 때 사용하는 것으로 어떤 쿼리를 논리적으로 하나의 작업으로 묶어줄 필요가 있을 때 사용합니다. 한 트랜잭션으로 묶인 쿼리 중, 하나라도 실패하면 전체 쿼리를 실패로 간주하고 실패 이전에 실행한 쿼리를 취소합니다. 이렇게 쿼리 실행 결과를 취소하고 DB를 기존 상태로 되돌리는 것을 롤백(rollback)이라고 부릅니다. 아래 예시에서는 유저가 회원가입을 할 때, 유저 정보를 DB에 넣고 나서 이메일을 전송하는 과정에서 Exception이 발생했을 경우, Transaction을 통해 자동으로 롤백..

개발/Spring 2020.11.11