목록전체 글 (215)
녕의 학습 기록
1주차에 대한 피드백 중 한가지는 'Git으로 관리할 자원을 고려하라'였다. 예를 들면 자바의 .class 파일은 git으로 관리할 필요가 없다.자바 코드만 있으면 .class 파일을 생성할 수 있기 때문이다. 나는 평소 개발할 때 어떤 파일을 git으로 관리할지는 .gitignore로 관리했었다.주로 민감한 파일이 github에 올라가지 않게끔 자동으로 생성된 .gitinore파일에 추가하는 방식이었다.그러나 자동으로 생성된 .gitignore에 대해서는 궁금증을 가지고 알아본 적이 없었다. 1주차 피드백이기도 하고, 알아두면 나중에 관련한 문제가 생겼을 때 도움이 될 거 같아 알아보았다. 우선 기존의 .gitignore파일이다 HELP.md.gradlebuild/!gradle/wrapper/gradl..
1주차의 공통 피드백에는 다음 링크와 함께 커밋 메세지를 의미있게 작성하라는 내용이 있었다.https://meetup.nhncloud.com/posts/106 링크 속 내용을 쭉 정독하고 가장 고민 된 부분은그래서 제목을 명령조로 사용할 것인가?였다. 영어 기준으로 좋은 커밋 메세지는 제목을 명령조로 작성한다고 한다.예를 들어 A메서드를 변경했으면 -> Change A method 이렇게 말이다. 근데 한국어로 작성하면 커밋 메세지의 제목이 'A메서드를 변경하라' 가 되어버린다.작성하면서도 이게 맞나하는 생각과 함께 나도 영어로 커밋 메세지를 작성해야하나 싶기도 했다.하지만 커밋 메세지를 작성하는 사람과 읽는 사람 모두가 한국인일 것이기 때문에 한국어를 사용하기로 했다. 그렇다면, 한국어로 커밋 메세지의..

백준에서 자바11로 StringBuilder의 isEmpty()를 사용하다 컴파일 에러를 마주침 isEmpty()는 CharSequence 인터페이스의 메서드로, 자바 15 이상부터 지원한다. 따라서 자바11에서는 isEmpty()대신 length()를 사용해 길이가 0인지를 비교해야한다. 실제로 isEmpty 메서드도 length가 0인지를 확인하는 방식으로 구현된다.

문제상황@WebMvcTest Controller 단위테스트를 마친뒤, Jpa Auditing 기능을 사용하기 위해 StockMateApplication에 @EnableJpaAuditing 애너테이션을 추가하자 기존에 성공하던 테스트들에서 다음과 같은 에러가 발생했다. 에러 메세지를 보아하니 jpaMappingContext 빈이 없어 발생하는 문제같다. 시도한 점@WebMvcTest는 컨트롤러 레이어를 테스트하는데에 특화되어있어 Controller, RestController, Resolver 등 Spring MVC와 관련된 빈들만 자동으로 등록한다. Testing Spring Boot Applications :: Spring BootTo test whether Spring MVC controller..

왓슈 프로젝트를 진행하며 비즈니스 로직을 어디에 작성해야하는 지에 관해 고민을 많이 했었다. "가입 신청 취소" api에서는 일련의 과정을 거친 뒤 가입 신청 엔티티의 status를 canceled로 바꿔주어야 한다.이때 ClubJoinRequest 엔티티의 status 필드를 어디에서 바꿔줘야 할까?1. 외부(ex_service 레이어)에서 status 필드를 직접 변경한다.2. 엔티티 내에서 status 필드를 직접 변경한다. 관련해서 다른 블로그도 찾아본 뒤 엔티티 내에 비즈니스 로직을 위치시키자는 결론을 지었으나 왜 그래야하는 지에 대해 스스로에게 물었을 때 명확하게 답변을 할 수 없었다. 그러다 최근 조영호님의 객체지향의 사실과 오해를 읽고나서 깨달은 바가 있어 생각을 정리해보고자 한다. 객체지..

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BJ_2098_외판원순회 { static int n; static int[][] w; static int[][] d; static int INF = 16*1000000 + 1; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ..

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BJ_11049_행렬곱셈순서 { static int[][] matrix; static long[][] d; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); ..

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class BJ_2342_DanceDanceRevolution { static int MAX = 10000000; public static void main(String[] args) throws IOException { int[][] m = {{1, 2, 2, 2, 2}, {0, 1, 3, 4, 3}, {0, 3, 1, 3, 4}, ..

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BJ_1328_고층빌딩 { static long MOD = 1000000007; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int n = Integer.p..

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BJ_1915_가장큰정사각형 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int n = Integer.parseInt(st.nextToken()); in..