스프링 28

Controller, Service 왜 나눌까요? (2022.12.02 - 작성 중)

Spring을 이용해서 개발하다보면 기계적으로 무언가를 만들거나, 혹은 이 것을 왜 ? 이렇게 구분하거나 사용하거나 궁금증을 가지게 된다. 그럴때가 되면 항상 그 궁금증을 해결하려고 북마크를 걸어놓거나 바로 찾아서 정보를 획득하고 정리하는 편이다.. (물론 북마크만 걸어놓고 미루다가 나중에 하는 경우도..) 오늘은 컨트롤러(Controller) 그리고 서비스(Service)단이다. 이유에 대해서 먼저 설명을 하자면 다음과 같다 트랜잭션의 처리 API의 확장 및 변경 1. 트랙잭션의 처리 내가 아는 트랜잭션은 DB 관련 작업 시 작업의 처리 순서? 단위?정도로 생각을 했었다. 트랜잭션은 DB에 데이터 관련 작업을 하고 업데이트를 할 때, 이 과정들을 한번에 처리하고, 성공 혹은 실패 시 롤백을 하거나, 커..

스프링 2022.12.02

RestController 그리고 ResponseEntity 궁금증?>>성능이슈?? (22.11.17 코멘트 추가)

1. 그냥 궁금증 >> 성능이슈? 문득 졸업작품 프로젝트를 진행함에 있어, 관리자 페이지를 분업하는 과정에서 의문점이 생겼다. ' 내가 기존에 만들었던 방식과 동료가 만든 방식이 달랐다 -> 전체 게시물을 출력하는 메소드' 반환되는 데이터는 비슷하게 출력이 되는데, 뭐가 다를까? + 성능에 대해서 어떤 것이 우위에 있을까? 라는 생각이 들었다. 3번의 실험을 해보았다 1. 기존에 사용한 방식 전체를 조회할 때 List를 이용해 List에 다 담아 dto를 반환하고, controlle단에서 출력 2. querydsl을 이용하는 방식 3. 1번과 service로직은 동일하나 controller단에서 기존에 만들어 놓은 MultiResult라는 클래스를 이용해서 반환하는 방식 결과는 걸리는 시간이 2 3 1 ..

Repository와 Service

공부를 하던 도중 궁금한 점이 생겼다. 우리가 DB와 관련된 작업을 하기 위해선 Repository와 Service를 만들어야하는데, 다른 사람들이 작성한 코드를 보면 기능을 Repository에서 구현하기도 하고, Service에서 구현하기도 하는데, 왜 이렇게 구분하는지가 궁금했다. (기존에 나는 service에서 구현) 김영한 님이 말하길 DB에 접근하는 코드는 Respository에 위임하고, Service 패키지에는 비즈니스 로직과 관련된 코드를 위임하는데, 이렇게 구분해두면 비즈니스 로직및 관련 부분에 오류가 발생하면 Service를 확인하고, DB 접근과 관련된 문제가 발생하면 Repository를 확인하면 된다고 한다. 서비스에서 DB계층을 연결하려고 하면 Repository라는 저장소를 ..

스프링/백엔드 2022.06.12

로깅 간단히 알아보기

서비스를 개발하고 테스트를 할 때, 그 로직이 잘 동작하는지를 확인하는 방법은 다양하다. 그 중에서 나는 보통 출력문 하나를 넣어서 잘 출력이 되는지를 확인하고는 했는데, 이러한 방식은 실무에서 사용하지 않고 사용을 권장하지 않는다. 그래서 출력문이 아닌 별도의 로깅 라이브러리를 사용해 로그를 출력하는데, 이 로깅 라이브러리의 종류가 매우 많다. 그래서 몇 개의 예시를 통해 정리해보고자 한다. @RestController public class LogTestController { // 이 코드는 로그를 선언하는 방법이다. private final Logger log = LoggerFactory.getLogger(getClass()); // 5번라인의 로그 선언 방법 외에도 아래 2개의 방법이 있다. pr..

스프링/백엔드 2022.05.18

REST API 기초와 사용법 (2022.12.08 추가)

1. REST API란? REST(Representational State Transfer)의 약자로 '대표적인 상태 전달'이라는 의미를 가진다. 웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍쳐와 비슷한데, 웹은 HTTP 프로토콜을 전송방식으로, URI를 식별 방식으로 사용하며 HTTP는 웹에서 GET, POST, PUT, DELETE 등 메소드를 이용해 정보를 주고받는 프로토콜이다 여기서 REST는 URI의 단순,간결한 장점을 계승한 네트워크 아키텍쳐라 보면 된다. 쉽게 요약해보자면 화면인 HTML을 리턴하는 방식이 아닌 사용자가 필요한 데이터 결과만 리턴해주는 방식이다. URI ? URL? URL : URI의 하위개념으로, 네트워크 상의 자원의 위치를 알려주기위한 규약으로 웹의..

스프링/백엔드 2022.03.28

InteliJ-Spring boot-dependencies

백엔드 개발자를 희망하는 사람들이라면 한 번쯤은 사용해보거나, 어디서 보거나 뭐 어찌저찌해서 관심을 가질만한 부분이다. 바로 의존성(depencency)부분이다. 스프링부트는 gradle, maven과 같은 도구들을 이용해 의존성을 관리하는데, Gradle을 기준으로 의존성 관련해서 정리를 해볼려고 한다. (Maven은 사용하기 뭔가 귀찮았음 XML이, Gradle이 더욱 간단하고, 익숙함.) 1. Gradle? 소프트웨어는 거의 단독으로 작동하지 않고, 다양한 라이브러리의 형태나 모듈들, 프로젝트등이 서로 의존하며 모듈화된 시스템을 구성하기 위해 분할되는데, 이때 종속성 관리를 통해 자동화된 방식으로 프로젝트에 필요한 종속성을 선언, 해결, 사용 하는 기술이다. Gradle은 빌드 자동화 도구 中 1개..

스프링/백엔드 2022.03.09

스프링 부트의 테스트 코드(부제 : JUnit), 책: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

결국 테스트 코드를 작성하는 이유는, 기능이 잘 동작하는지 확인을 하기 위함이다. 테스트 코드는 내가 작성한 로직이나 기능들을 테스트 코드를 통해 잘 동작하는지 확인해보는 것이다. 테스트 코드 작성 전 개발 방식은 보통 1. 코드의 작성 2. 프로그램 실행 3. 테스트 도구를 통해 HTTP 요청 (Postman) = 브라우저를 통해 서버에 접속하고 테스트 대상 메소드를 동작시키는 요청 4. 요청 결과를 System.out.println()을 통해 눈으로 확인. 5. 결과가 이상하면 프로그램 실행을 중지하고 코드를 수정 이런 방식으로 많이 진행 되었는데, 테스트 코드를 작성하게 되면, 1. 코드를 작성 2. 테스트 코드의 작성 후 실행 3. 결과에 따른 동작(코드를 수정한다, 정상 작동하니 다음 로직을 개..

스프링/백엔드 2022.02.10

Compile과 implementation의 차이점

현재 인프런이라는 강의 서비스에 CTO로 계신 김동욱님의 책인 '스프링부트와 AWS로 혼자 구현하는 웹 서비스' 라는 책을 통해 다시 웹 백엔드 부분을 공부하고 있다.(유툽에서 분명히 많이 본 이름이였는데, 아 그분? 하면서 얼굴이 떠올랐다. 그분이 그 분인거 같다....) 책에서는 인텔리제이와, JPA, JUnit테스트, Gradle, 소셜로그인, AWS 인프라로 무중단 배포까지를 망라해 책을 공부하는 독자들에게 지식을 전수해준다. 이 책이 끝판왕 개발 서적은 아니지만 더 깊은 내용을 공부하고 싶다면 다른 책을 찾아봐야한다. (인프런의 김영한-JPA수업 추천) 해당 책은 이미 서버 개발자(주니어 급)를 꿈꾸는 학생 또는 취준생이라면 한 번쯤은 봤거나, 접해볼 만한 책일 것이다. 내가 여기서 얻고자 하는..

스프링/백엔드 2022.01.30