전체 글

JAVA 🎻

JVM은 처리하지 않은 예외를 어떻게 처리할까? StackTrace 알고보자

프로그램 개발 시, 우리는 우리의 예상대로 동작하지 않는 수많은 상황을 마주치게 됩니다.그중에서도 예외 발생 시, StackTrace를 통해 디버깅을 하곤 하는데요. StackTrace를 더 잘보기 위해 StackTrace에 대해 알아봅시다!Java 예외는 어떻게 터질까?JVM은 예외가 발생했을 경우, 예외를 처리할 수 있는 try-catch 블록을 찾습니다.try-catch 블록을 사용하여 코드 내에서 명시적으로 처리되지 않을 경우, 예외는 전파되는데요. 쓰레드 내에서 처리시킬 try-catch 블록가 없어 끝까지 처리되지 않은 예외는 결국 스레드의 실행을 중단시키는 예외를 말합니다.해당 처리되지 않은 예외를 처리하기 위해 JVM은 아래의 Thread 클래스의 dispatchUncaughtExcep..

우아한테크코스 6기/3단계

Intellij Debugger, 어디까지 알고 사용하고 있나요? - 신기한 기능편

이 글을 통해 기본적인 인텔리제이의 디버깅 기능들을 알아볼 수 있었습니다. 이제까지의 내용으로 아마 어느정도는 자주 보았던 또는 예상했던 기능들을 사용하는 데에는 무리가 없습니다.하지만 흥미로운 기능들이 있어, 소개하고자 글을 작성하게 되었습니다. (맛있는 거 많다 ~) 이 글은 인텔리제이 기본 디버깅 기능들을 알고 계시다면 이전 편을 보지 않았어도 이해하기 충분하지만, 이전 편을 보았다고 가정하고 글을 작성하겠습니다. 프로그램에 끼어들어버리기다음 기능들은 말 그대로 실행 중인 프로그램에 흐름에 내가 끼어들어 영향을 주는 것들인데요.코드 상의 변경을 하지 않고도 메서드 실행 결과 등등을 변경해버리는 기능입니다.다시 Reset Frame사실 이전 글의 Reset Frame 부분을 보면서 궁금하셨을 지점이..

우아한테크코스 6기/2단계

[방탈출 사용자 예약] @Bean, @Component, 그리고 POJO

이번 방탈출 사용자 예약에서 아래와 같은 예제 코드가 있었는데, 무지성으로 복붙하고 나서 보니 @Bean에 대해 궁금함이 생겼다. 이 기회에 @Bean, @Component의 차이가 무엇인지에 대해 정리하고 어떤 경우에 사용하면 좋을지에 대해 이야기 해보고자 한다.Spring Bean이란스프링 부트에서 Bean은 Spring Container가 관리하는 객체들을 말한다.따라서 내가 사용하고자 하는 객체를 Spring DI를 통해 사용하기 위해서는 객체를 Bean으로 등록하는 과정이 필요하다.Spring Boot에서의 Bean 등록 방법spring boot에서는 Bean을 등록할 수 있는 방법을 두가지를 제공한다.spring은 xml 등의 방식도 제공하는 것 같으나 아직은 패스한다.1. @Component..

우아한테크코스 6기/2단계

영속성 entity 와 domain entity 분리해보기

기존 프로젝트를 할 때, 스프링과 비슷하게 "객체지향" 에 대해서도 깊은 고민 없이 자바를 사용했었다.돌아보면 도메인 객체를 사용하지 않고 그저 영속성 entity를 가지고 개발을 했던 것 같다. 이번 9단계 요구사항을 반영하기 위해 코드를 볼아보면서, 기껏 열심히 레벨 1동안 배운 내용들을 써먹지 못하고 옛 프로젝트를 할 때처럼 사용한 것 같아서 아쉬웠다. 따라서 이 프로젝트에서의 엔티티 객체들을 어떻게 바라보아야 할까 고민하다가 혼란이 와버렸다.public class Reservation { private final Long id; private final String name; private final ReservationDate reservationDate; private f..

우아한테크코스 6기/2단계

[방탈출 예약 관리] 템플릿 엔진과 @RestController

템플릿 엔진스프링 부트는 정적 페이지와 템플릿 시작 페이지를 모두 지원한다.먼저, static 아래의 index.html 파일을 찾고 없다면 index 템플릿을 찾는다. 아래와 같은 위치로 파일이 존재한다면, /static/index.html을 찾고, (/static/index.html)이 없다면, /templates/index.html를 찾아 응용 프로그램 시작 페이지로 띄운다.static에는 보통 정적 파일인 js나 css 같은 파일들이 위치하고, templates에는 서버가 실행되면서 동적으로 렌더링되는 Thymeleaf 템플릿 파일들이 위치한다.템플릿 엔진 반환하기@Controllerpublic class MemberController { @GetMapping("/hello") publ..

우아한테크코스 6기/2단계

[방탈출 예약 관리] @DiritesContext, 알고 쓰자

미션 예제 코드에 @DirtiesContext라는 어노테이션을 사용하던 중 정확하게 어떤 어노테이션인지 알고자 정리한다. 기본적으로, 스프링 테스트에서는 ApplicationContext를 캐싱하여, 기존의 Context를 재활용한다.따라서 DB 작업이 수행된 테스트가 존재할 때, 테스트 간에 격리가 되지 않고 테스트 간에 영향을 받게 될 수도 있는 것이다.이럴 때 사용할 수 있는 것이 바로 @DirtiesContext 어노테이션이다. @DirtiesContext 너는 누구냐@DirtiesContext는 테스트 실행 중, Spring ApplicationContext가 Dirty 상태가 된다면 컨텍스트를 닫아버리는 것을 말한다.즉, 애플리케이션 컨텍스트가 더티로 표시되면 테스트 프레임워크의 캐시에서 제거..

우아한테크코스 6기/2단계

@SpringBootTest의 RANDOM_PORT 옵션과 RestAssured 함께 사용하기

1단계 방탈출 예약 관리 미션의 제공된 테스트 코드를 보면,클래스단에 @SpringBootTest가 붙여져 있고 RestAssured 라이브러리를 통해 테스트 코드를 작성하고 있습니다. 오늘은 테스트 포트를 변경하려다 삽질을 해본 이야기에 대해 작성해보겠습니다.👀 @SpringBootTest란Spring Boot에서 Spring Boot 기능이 필요할 때 표준 스프링 테스트 @ContextConfiguration 어노테이션의 대안으로 사용할 수 있는 어노테이션입니다.이 어노테이션은 Spring을 통해 테스트에 사용되는 ApplicationContext를 생성하는 방식으로 작동합니다.다시 말해 스프링 테스트를 위해 ApplicationContext를 생성합니다.🤔 webEnvironment 속성값@Sp..

우아한테크코스 6기/1단계

[블랙잭 미션] 페어프로그래밍 단계 학습 내용 정리

🫡 구현 시  집중한 부분1. 함수형 프로그래밍함수형 프로그래밍이란, 작업을 어떻게 수행할 것인지(즉 로직에 집중하는 것이) 아니라 무엇을 할 것인지에 집중하는 방법구체적인 작업 방식은 라이브러리가 알아서 처리하고, 사용자는 라이브러리가 제공하는 인터페이스를 구현하는 것만으로도 원하는 작업을 수행할 수 있다. 자바에서는 익명 클래스, 함수형 인터페이스, 람다, 스트림API 등의 문법을 사용할 수 있다. 선언형 프로그래밍과 명령어 프로그래밍의 차이점을 이론으로만 들었을 때는 잘 와닺지 않았었는데,For문을 사용하여 명령형으로 사용한 코드와 Stream을 사용하여 선언형으로 작성한 코드를 비교해보니 차이점을 확 느낄 수 있었다. 함수형 인터페이스와 스트림 API를 최대한 활용하고자 하였다.👍 이번 미션에..

우아한테크코스 6기/1단계

[사다리 타기 미션] 학습 내용 정리

사다리 타기 미션 🫡 구현 시 집중한 부분 1. TDD 테스트를 먼저 작성하고 기능 구현 후 리팩토링하는 과정 TDD는 사이클을 반복하여 구현하는 것을 말한다. [개인적으로 느낀 장점] 그동안 나는 설계 단계에서 도출한 객체와 구조를 최대한 바꾸지 않도록 하려고 고민했었지만 스스로 스킬이 부족하다는 생각에 빠져있었는데, TDD는 초기 설계에 집착할 필요가 없어 심리적으로 편했던 것 같다. 정말 요구사항에만 있는 행위들만 테스트하고, 구현하기 때문에 불필요한 행위들이 추가적으로 구현되지 않았다. 2. 제어할 수 없는 부분 테스트 |-----|-----|-----| 처음 사다리를 구현할 때, 하나의 세로 줄을 Line이라는 객체를 통해 구현하고 객체 안에서 경로가 있는지 없는지를 나타내는 List를 Rand..

JAVA 🎻

Collection과 Collections의 차이

작년 8월 스터디에서 제가 작성했던 이슈 내용을 가지고 왔습니다. https://github.com/JNU-econovation/Javs/issues/67 개발이나 알고리즘을 풀 때 collection을 상속한 List와 Set, Map는 많이 사용하지만 정작 collection에 대한 기본 지식은 부족한 것 같아 선정하게 되었습니다. 추가로 collections와의 차이점은 무엇일지에 대해 알고자 작성하게 되었습니다. Collection Collection Framework에서 최상위 인터페이스 Collection Framework란 뭘까 자료 구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료 구조들이 있는 라이브러리 컬렉션이라는 단어의 의미 -> 다수의 데이터(데이터 그룹) 그래서 제..

minl741
홀리몰리 개발로그