자바로 개발을 하게 되면 필수인 IDE가 있습니다. 바로 인텔리제이인데요.그 중에서도 인텔리제이의 Debugger Mode를 다 한번쯤 사용해본 경험이 있으실 겁니다. Debugger Mode를 쓸 때 저는 Breaking Point와 Step Over 버튼만 무지성으로 사용하곤 했었습니다.테코톡에서 디버그 라는 주제를 준비를 하면서 인텔리제이 디버거에 대해서도 잘 사용하고자 글을 작성하게 되었습니다! 기본적인 개념들은 알고 있다! 흥미로운 디버깅 기능을 알고 싶어!라는 분들은 여기로 이동해주세요 !디버깅 툴을 알아보기 전에 알아두어야 할 Run/debug configurations디버깅을 시작하기 전에 알아두어야 할 인텔리제이의 기능이 있습니다.바로 Run/debug configurations 인데요...
레벨 3 해커톤 중 에러를 마주쳤습니다.잘만 동작하던 코드였는데, 갑자기 컴파일에 실패했습니다.@Getter를 사용한 코드들에서 메서드를 찾을 수 없다는 에러였는데요. 사실 해당 에러는 이전에도 프로젝트를 했었을 때 몇번 봤었던 에러였습니다.항상 Annotation Processor라는 의존성을 추가하고 그저 넘어갔었는데, 이번 기회를 통해 정확하게 해당 Lombok Annotation Processor가 의미하는 바를 파악하기 위해 작성하게 되었습니다.Syntax tree 란먼저 Annotation Processor를 알아보기 전에 알아두어야 할 개념이 있습니다.Syntax tree에 대해서 먼저 알아두면 좋을 것 같은데요. Syntax tree는 Parse Tree라고도 불리는데요.Parse Tre..
오랜만의 팀 프로젝트라 매우매우 신나고 긴장되었던 1차 스프린트!🔥 팀빌딩 시작 레벨3 시작과 함께 팀빌딩이 발표되었다. 함께 팀이 된 백엔드 크루들이 전부 이미 알고 있던 크루들이라 안심이 되기도 오히려 걱정이 되기도 했다. 걱정 반 설레임 반으로 팀원들과 인사 후 팀빌딩 시간을 가졌다!❄️ 아이스브레이킹 본격적인 팀빌딩 세션의 킥오프 미팅에 앞서, "나 사용 설명서" 라는 것을 만들고 공유하는 시간을 가졌다. 팀원들이 어떤 방식으로 협업하는 것을 선호하고, 주의해야 할 것들이 무엇인지 미리 확인할 수 있었다.🦵🏼 킥오프 미팅그 후 킥오프 미팅을 했는데, 쉽게 말하면 개인이 프로젝트 또는 팀에서 지향하는 것을 공유하고 공동이 지향하는 목표와 협업의 방식을 맞추어 나가는 시간이었다. 팀빌딩이 되기..
밀리고 밀리다가 이제 쓰는 Test 개선기....ㅠ 기존 방식통합 테스트와 레포지토리 테스트 시 H2 데이터베이스를 사용하여 테스트를 진행 했다.데이터베이스를 사용한 테스트에서, 각각을 격리하기 위해 @DirtiesContext를 ClassMode.AFTER_EACH_TEST_METHOD 옵션으로 사용했다. 테스트 격리용 어노테이션을 생성하고 해당 기능이 필요한 테스트에 대해 선언을 한다.아래는 레포 테스트와 통합 테스트용 어노테이션에 격리용 어노테이션을 적용하여 사용한 예시이다. 그런데 해당 옵션은 매 테스트 @DirtiesContext는 DataSource를 포함한 전체 ApplicationContext을 새로 생성한다.초반 미션을 진행할 때에는 데이터베이스 격리가 필요한 테스트가 많지 않아 해당..
레벨1에 이어 레벨2도 매우 빠르게 지나갔다.개인적으로 레벨1보다 더 시간이 빨랐던 것 같다. 그 기념으로 회고를 작성한다.더이상 비교하지 않는다.우테코에 오고나서 레벨1을 보내며 가장 큰 생각은 "과연 나는 다른 사람들처럼 성장하고 있나?"였다."대단한 사람들이 정말 많은데, 내가 어떻게 이 곳에 있지?", "저 사람은 저렇게 빨리 배우고 습득하는데, 나는 왜 느리지?" 라는 생각과 비교가 레벨1기간동안 나를 잡아먹었던 것 같다.또 객체지향에 대해 어려움을 심하게 느끼면서 더 비교를 많이 하고 힘들어했던 것 같다. 레벨1을 마치며 객체지향과 "정답은 없다"에 대한 고민이 어느정도 해소가 되면서 이런 비교가 드는 이유에 대해 알게 되었다.이유는 내 욕심이었다. 되돌아보면 열심히 하고 싶은 욕심이 나를 채..
스프링으로 개발을 하면서 항상 사용했던 빌드 툴은 gradle 이였다.Maven보다 간결하고 가독성이 좋다고 생각했기 때문인데, 이번 미션을 하면서 자주 사용해왔던 gradle의 기본적인 기능에 대해 학습해보고자 글을 작성하게 되었다. Gradle이란?소프트웨어의 빌드, 테스트, 배포를 자동화하는 도구로 주로 JVM 프로젝트를 빌드할 때 사용된다.Gradle 주요 개념Build ScriptsGradle이 프로젝트를 빌드하는 방법을 정의하는 스크립트를 말한다.Dependency Management프로젝트에 필요한 외부 리소스를 자동으로 관리해준다.Tasks코드 컴파일, 테스트 실행 등의 기본 작업 단위를 말한다.PluginsGradle의 기능을 확장하는 플러그인, 선택적으로 기능을 추가할 수 있다. Jav..
🦵🏼발단우테코에 오기 전, 팀 프로젝트를 하면서 JPQL의 new 키워드를 통해 생성한 DTO를 받은 적이 있었다.그러고 난후 코드리뷰에서 다른 팀원이 비용이 비싸기 때문에 DB단에서 연산을 지양하는 것이 좋을 것 같다는 식의 피드백을 주었는데, 당시에 new 키워드의 실행 시점이 어느 시점인지 파악해보거나 깊게 생각해보지 않고 코드를 변경했었다. 우테코에 오고 난후, 미션을 진행하면서 JPQL로 new 키워드를 사용한 예제 코드가 있었는데 당시의 경험이 기억나면서 정말 지양해야 할지 장단점이 무엇일지 파악하고자 글을 작성하게 되었다. 🤔 의문new 키워드가 정말 DB단에서 연산이 맞을까?new 키워드, 더 나아가 JPQL은 어떻게 동작할까?아니라면, 지양해야 하는 다른 이유가 있을까?최종적으로 n..
이번 방탈출 사용자 예약에서 아래와 같은 예제 코드가 있었는데, 무지성으로 복붙하고 나서 보니 @Bean에 대해 궁금함이 생겼다. 이 기회에 @Bean, @Component의 차이가 무엇인지에 대해 정리하고 어떤 경우에 사용하면 좋을지에 대해 이야기 해보고자 한다.Spring Bean이란스프링 부트에서 Bean은 Spring Container가 관리하는 객체들을 말한다.따라서 내가 사용하고자 하는 객체를 Spring DI를 통해 사용하기 위해서는 객체를 Bean으로 등록하는 과정이 필요하다.Spring Boot에서의 Bean 등록 방법spring boot에서는 Bean을 등록할 수 있는 방법을 두가지를 제공한다.spring은 xml 등의 방식도 제공하는 것 같으나 아직은 패스한다.1. @Component..
기존 프로젝트를 할 때, 스프링과 비슷하게 "객체지향" 에 대해서도 깊은 고민 없이 자바를 사용했었다.돌아보면 도메인 객체를 사용하지 않고 그저 영속성 entity를 가지고 개발을 했던 것 같다. 이번 9단계 요구사항을 반영하기 위해 코드를 볼아보면서, 기껏 열심히 레벨 1동안 배운 내용들을 써먹지 못하고 옛 프로젝트를 할 때처럼 사용한 것 같아서 아쉬웠다. 따라서 이 프로젝트에서의 엔티티 객체들을 어떻게 바라보아야 할까 고민하다가 혼란이 와버렸다.public class Reservation { private final Long id; private final String name; private final ReservationDate reservationDate; private f..
템플릿 엔진스프링 부트는 정적 페이지와 템플릿 시작 페이지를 모두 지원한다.먼저, static 아래의 index.html 파일을 찾고 없다면 index 템플릿을 찾는다. 아래와 같은 위치로 파일이 존재한다면, /static/index.html을 찾고, (/static/index.html)이 없다면, /templates/index.html를 찾아 응용 프로그램 시작 페이지로 띄운다.static에는 보통 정적 파일인 js나 css 같은 파일들이 위치하고, templates에는 서버가 실행되면서 동적으로 렌더링되는 Thymeleaf 템플릿 파일들이 위치한다.템플릿 엔진 반환하기@Controllerpublic class MemberController { @GetMapping("/hello") publ..