목록분류 전체보기 (56)
코딩블로그
에휴..보이시나요 이 중복되고 드러운 코드 구조를? public void incrementPositiveCineMaster(Popcorn popcorn) { popcornQueryRepository.incrementPositiveCineMaster(popcorn); } public void incrementPositiveGreatFilming(Popcorn popcorn) { popcornQueryRepository.incrementPositiveGreatFilming(popcorn); } public void incrementPositivePom(Popcorn popcorn) { popcornQueryRepository.incrementP..
프로젝트 진행 중, 시작일과 종료일을 Embedded 객체로 따로 빼서 VO로 처리하는 코드를 짜보았다. 이 과정에서 VO의 정의 , 사용 이유 그리고 사용법에 대해 배울 수 있었다. VO의 의미도메인(엔티티)에서 한 개 또는 그 이상의 속성들을 묶어 특정 값을 나타내는 객체를 의미한다 VO 사용 이유int, String과 같은 primitive 타입이 도메인 객체를 모델링하기 위해 충분하지 않다.객체가 primitive 타입의 기능들을 전부 사용하지 않는다유효성 검사 코드를 객체에 중복되는 부분들이 존재하는 모든 객체에서 검사 코드를 진행해야 할 것이다 VO 사용 시 제약 조건불변성Setter와 가변 로직이 없는 불변 상태여야 한다동등성값이 같다면 동등한 객체로 판단해야 한다 주소가 달라도 값이 같다..
커넥션 풀 이해애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가 정보를 DB에 전달한다DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB세션을 생성DB는 커넥션 생성이 완료되었다는 응답을 보낸다 DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환이러한 과정처럼 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모된다.고객이 애플리케이션을 사용할 때, SQL을 실행하는 시간 뿐만 아니라 커넥션을 새로 만드는 시간이 추가 되기 때문에 결과적으로 응답 속도에 영..
JDBC 이해JDBC 등장 이유우리가 애플리케이션을 개발할 때 데이터를 대부분 데이터베이스에 보관한다.클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해 데이터베이스를 사용한다 애플리케이션 서버와 DB - 일반적인 사용법1. 커넥션 연결 : 주로 TCP/IP를 사용해서 커넥션을 연결한다2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다3. 결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다 일반적인 사용법의 치명적인 문제점이 있다. - 바로 DB변경 시 2가지 큰 문제가 발생한다각각의 데이터베이스마다 커넥션을 방법, SQL을 전달하는 방..
https://www.acmicpc.net/problem/20207 풀이 1번 : 사각형 면적 구하기 import java.util.*;import java.lang.*;import java.io.*;// The main method must be in a class named "Main".class Main { public static int[][] arr; public static int N; public static class Pair { int start, end; public Pair(int start, int end) { this.start = start; this.end = end; } } ..
이미 진행이 된 프로젝트에 합류를 하다 보니 코드 컨벤션 맞추어서 해야하는데 오랜만에 팀 프로젝트로 진행하다 보니 컨벤션 실수도 하고 새로 알게 된 점들도 있다. 그중에서 Spotless이라는 플러그인을 알게 되었는데, 테스트 코드의 컨벤션을 지킬 수 있게 도와준다. 나름 유용할 것 같아서 팝콘메이트에도 적용을 해보았다. (과거에 한창 프론트엔드 할 때 VSCode의 prettier 플러그인을 애용했는데 스프링 부트에서도 비슷한 플러그인을 제공해준다니!!) Spotless란? Junit5에서 컨벤션을 지키고 쉽게 유지보수하기 위해 사용하는 플러그인이다 메인 루트의 Build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.1' ..
상영회 생성하는 API가 잘 호출이 되는지 확인하기 위한 테스트를 구성해보아서 간단하게 200뜨는 것 보고 처음에는 "아~ 잘되네~~"하고 넘어갔는데 다른 사람들 코드를 참고해보니까 실제로 API를 호출하고 Body안에 원하는 Response까지 받아와야 되는 것을 깨닫게 되었다. 그래서 Body안에 원하는 값을 받아오기 위해서 트러블슈팅을 해보았다. 나는 Controller를 테스트하기 위해서 @AutoConfigureMockMvc 어노테이션을 사용한다 웹 환경에서는 반드시 서블릿 컨테이너가 구동되고 DispatchServlet 객체가 메모리에 올라가야 한다. 그래서 저 @AutoConfigureMockMvc 어노테이션을 사용해서 서블릿 컨테이너를 Mocking하여 실제로 테스트용 모형 컨테이너를 사용..
이번에 팝콘메이트 하면서 통신할 때 에러 코드나 짤막한 에러 원인을 받아 볼 수 있게 하였는데, 그 정보들만 가지고 원인을 해결하지 못할 때가 있다 보니 리팩토링 할 겸 팀 공용 디스코드에 로그 전체를 볼 수 있는 시스템을 만들어 보려고 한다 먼저 팀이 사용하는 디스코드에서 웹후크를 만들려면 채널 설정 -> 연동 들어가서 웹후크 만들기를 누르면 된다! 간단한 작업이다 본격적으로 코드 구현에 대해 알아보자 (1) FeignClient 이용하는 방식 먼저 DiscordClient 클래스에 Controller 클래스에 메서드 짜주는 것처럼 인터셉터를 위한 메서드를 써준다 @FeignClient( name = "discord-client", url = "웹후크 URL", configuration = Discor..