서론최근 tdd 방식으로 사이드프로젝트를 진행중이다.tdd 방식은 시간도 더 걸리고 귀찮지만 이미 테스트코드가 있으니까 리팩터링 시 chat gpt를 적극 활용할 수 있다. 코드를 수정할 때도 테스트 딸깍으로 사이드 이펙트를 확인할 수 있어서 좋다. 또, 실패 테스트 작성 과정에서 예외 처리에 대해 신경쓰게 되어 꼼꼼한 예외처리가 가능해지는 것 같다. 컨트롤러에서 요청값을 받을 때 적용한 예외처리에 대해 간단하게 정리해보고자 한다. Bean Validation @GetMapping("/{encryptedCongressmanId}") public ResponseEntity ratingList( @PathVariable String encryptedCongressmanId, ..
스프링
스프링에서 @Value 는 properties 파일에서 속성값을 읽어오는데 쓰인다. 테스트 시에는 @Value를 어떻게 사용할까? public class ValueTest { @Value("${member.password}") private String password; @Test void valueTest() { assertThat(password).isNotNull(); assertThat(password).isEqualTo("babo123!"); }}위 테스트는 password값이 null로 실패한다. @ExtendWith(SpringExtension.class)@ContextConfiguration(classes = TestConfig.clas..
작년에 사이드프로젝트를 진행하면서 api서버를 개발했다. 프론트에서 http 요청 바디에 데이터를 넘겨주면 api서버에서는 무조건 dto로 받기로 했다. 팀원이 그렇게 처음부터 정하고 프로젝트를 진행했기 때문에 왜 dto를 사용해야 되는지 고민해보지를 않았다. dto를 쓰지 않은 코드를 보면서 역체감으로? 왜 dto를 쓰는게 좋은 지 느끼게 된 바가 있어 글을 작성해보겠습니다. 어디까지나 제 주관적인 생각입니다. HttpServletRequest getParameter 사용 @RequestMapping("/messages") public ModelAndView make(HttpServletRequest request) { String title = request.g..
출처김영한님 스프링 핵심 원리 기본편 강의https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런김영한 | 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보www.inflearn.com 스프링 컨테이너가 필요한 이유스프링 컨테이너가 무엇인지 알아보기 전에 먼저 스프링 컨테이너가 왜 필요한지 알아보자. public class OrderServic..
서블릿이란?서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 서블릿은 클라이언트의 요청에 따라 동적으로 작동하는 웹 애플리케이션 컴포넌트이다. 서블릿이 필요한 이유서블릿을 사용하면 개발자는 의미있는 비즈니스 로직 개발에만 집중하면 되므로 효율적인 개발이 가능하다. @WebServlet(name = "helloServlet", urlPatterns = "/hello")public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest..
rednose 프로젝트를 진행하면서 카카오 로그인 부분을 맡았고 관련해서 배운 점들을 정리해보겠습니다.카카오 로그인kakao developers 문서에서 설명하는 흐름은 위와 같습니다. 먼저 사용자는 프론트엔드에서 제공하는 kakao login 버튼을 눌러 카카오 로그인을 시도합니다.step1사용자가 카카오계정 로그인과 동의 화면에서 동의하고 계속하기를 클릭하면 kakao auth server에서 인가코드를 redirect uri로 보내줍니다. 이 redirect uri는 저희가 kakao developers에 앱을 등록하고 정할 수 있습니다. 인가 코드를 받고자 하는 uri를 지정하면 됩니다. @AccessibleWithoutLogin @GetMapping("/login/kakao") ..
서론 프로젝트를 진행하며 예외처리에 관해 가은님과 의견차이가 있었다. public enum ErrorCode { INVALID_REQUEST_BODY, SOLUTION_NOT_FOUND, PROBLEM_NOT_FOUND, PROBLEM_LINK_NOT_FOUND, COMMENT_NOT_FOUND, ... 이하생략 } 현재 우리가 사용하는 ErrorCode는 위와 같다. public class SolutionNotFoundException extends NotFoundException { public SolutionNotFoundException() { super(SOLUTION_NOT_FOUND, "풀이를 찾을 수 없습니다."); } } 커스텀한 예외 클래스에서 예외코드를 사용할 때는 위와 같이 예외메세..
사용자 정의 Repository가 필요한 이유 public interface ReviewRepository extends JpaRepository{ ... } Spring이 JpaRepository를 상속하는 인터페이스의 구현체를 자동으로 생성해준다. Service에서는 자동 생성된 구현체를 주입받아 사용한다. 기본으로 제공하는 메서드들을 사용할 수 있다. 더해서 명명규칙에 따라 메서드를 작명하면 알아서 쿼리를 짜준다. 개발자는 메서드를 가져다 쓰기만 하면 되는 편리한 기능이다. https://zara49.tistory.com/130 [JPA] JPA Repository 메서드 명명규칙 JPA는 우리가 쿼리를 열심히 짜는것을 대신해 간단하게 표현하여 쿼리를 사용할 수 있도록 해준다. 그렇다면 어떤 형태로..