우아한테크코스

우아한테크코스/레벨2

[Spring] 에러 응답 (Error Response) 을 반환하는 이유는? 어떤 정보를 담아 보내야할까?

이번 미션에서 스프링으로 사용자가 방탈출을 예약하는 기능을 구현하였다.  이 과정에서 예약 신청 시 생기는 여러 가지 오류 사항을 핸들링해야했는데, 사용자에게 어떤 에러인지만 보여주면 되지 않을까 하는 생각에 아래와 같이 400 Status Code와 함께 직접 정의한 에러 메시지가 반환되도록 하였다.그런데 이렇게 메시지 형태로만 응답을 보내도 괜찮을까? 이 응답을 받는 입장에서 에러에 충분히 대응할 수 있는 정보가 주어진걸까? 하는 의문이 들었었다. 그리고 미션 피드백 시간에 이런 질문을 받았다. 에러 응답에는 어떤 값이 포함되어야 하는가? 이 피드백을 통해 서버가 클라이언트에게 에러를 응답하는 이유가 무엇인지, 그리고 어떤 값이 포함되어야 하는 지에 대해 궁금하였다. 이를 공부해보고 미션에 적용한 과..

우아한테크코스/레벨2

[회고] 우아한테크코스 6기 백엔드 레벨2 2주차 회고

2024년 4월 22일 ~ 4월 26일레벨 2 첫 미션인 방탈출 예약 관리 미션을 최종 마무리한 한 주였다 👏리뷰어 제이와 티키타카하며 빠르게 미션을 마무리했고 주말동안 그 시간들동안 배웠던 걸 정리하고 있다.요즘은 레벨1과 다르게 정말 마음 편히 공부하고 있다. 스트레스 받고 혼자 애써야만 성장할 수 있을 것이라 믿었던 그 때와는 다르게, 사람들과 즐겁게 이야기하면서 챙기지 못할 것은 챙기지 않아도 성장할 수 있음을 깨달은 요즘이다. 내가 얼만큼 무리해야 지치는 지, 주어진 시간동안 얼마나 배운 것을 흡수할 수 있는지 선을 만들어가고 있다. 가끔은 욕심도 내보고 실패하기도 하면서 나의 자연스러운 감정과 생각을 알아가는 중이다.그래서 이번 주에 뭘 했는지, 어떤 걸 느꼈는지 정리해보자 😉🦷사랑니 발..

우아한테크코스/레벨2

[OOP] POJO (Plain Old Java Objects) 란? (feat. 스프링의 등장 배경)

앞서 포스팅을 작성하면서 DTO를 공부하는 과정에서 POJO라는 단어를 많이 보았다. POJO가 어떤 객체를 의미하는 지 정확히 몰랐기 때문에 POJO가 뭔지, 그리고 스프링에서 어떤 의미가 있는지 이번 포스팅에서 공부해보려고 한다. When we talk about a POJO, what we’re describing is a straightforward type with no references to any particular frameworks. A POJO has no naming convention for our properties and methods.- Bealdung POJO는 Plain Old Java Object라는 뜻으로 오래된 방식으로 만들어진 자바의 간단한 객체라는 의미로 직역할 ..

우아한테크코스/레벨2

[Spring] 직렬화 (Serialization)와 역직렬화 (Deserialization) 의 정의 및 스프링에서 사용하는 방법

스프링을 사용해서 개발을 진행하는 과정에서 객체를 반환했을 뿐인데 JSON으로 자동으로 변환되는 것을 경험하였다. 이를 자바의 기능인 직렬화라고 주워들었는데, 직렬화가 정확히 어떤 것인지 그리고 스프링에서는 어떻게 사용되는지 궁금하여 글을 작성한다.🧐 직렬화와 역직렬화란?직렬화 (Serialization)은 프로그램 내부에서 사용하는 객체나 데이터를 다른 프로그램에 전달하여 사용할 수 있도록 데이터의 형태를 바이트 (Byte) 형태로 변환하는 것을 의미한다.역직렬화 (Deserialization)은 마찬가지로 바이트 형태로 받은 정보를 프로그램 내에서 다루는 것이 가능한 객체 형태로 다시 변환하는 것을 의미한다.즉, 직렬화라는 개념은 JSON에 한정되는 것이 아닌 CSV 혹은 XML 등의 문자열 형태로..

우아한테크코스/레벨2

[OOP] DTO(Data Transfer Object) 란 무엇인가? 어떻게 사용하는가?

방탈출 예약 관리 미션을 진행하면서 아래와 같은 리뷰를 받았다. 이 리뷰를 계기로 Controller에서 받은 요청 DTO를 어디 계층까지 넘길 수 있는 가에 대해 고민하였다. 이 고민을 브리 코치님과 이야기하였더니 DTO가 무엇인가에 대해서 질문을 해주셨다. 그래서 이번 포스팅에서는 DTO가 무엇인지, 어떤 이유로 생기게 되었는 지, 그리고 어떻게 사용할 수 있을 지 알아보려고 한다. 🙋‍♀️ DTO란? (feat. Martin Fowler)DTO는 Data Transfer Object의 줄임말로 계층 간 데이터 전달을 위해 쓰는 객체이다.The solution is to create a Data Transfer Object that can hold all the data for the call.....

우아한테크코스/레벨2

[회고] 우아한테크코스 6기 백엔드 레벨2 1주차 회고

2024년 4월 16일 ~ 4월 19일 레벨 2의 첫 주차가 마무리 되었다. 😍 레벨 1 브라운조라는 울타리에서 벗어나 레벨 2 구구조 팀원들과 새롭게 우테코 생활을 시작하게 되었다. 새로움과 아쉬움 그 사이에서 레벨 2를 맞이하였고, 스프링을 사용한 첫 미션도 시작하였다. 🎯 마음 내려놓기새롭게 주어지는 미션도 이전 기수에서 진행한 적 없는 완전히 새로운 미션이었다. 순수 자바로 코딩하던 혼돈의 레벨 1을 지나 프레임워크라는 무기를 얻어 정형화된 틀 안에서 미션을 수행하게 되었다. 새로운 개념들이 쏟아져 나왔지만 그래도 미션 자체는 쉬운 편이었고 그 덕에 빠르게 PR을 작성해서 제출하였다. 무려 새로운 프로젝트의 첫번째 PR! 그렇게 레벨 2 1주차는 스프링 프레임워크를 사용한 미션을 해결하면서 시간을..

우아한테크코스/레벨1

[회고] 우아한테크코스 6기 백엔드 레벨1 방학 회고 & 레벨 2 목표

2024년 4월 8일 ~ 4월 15일 조금 뒤늦은 레벨1 첫 방학 회고를 쓰려고 한다. 첫 방학이니만큼 방학 전부터 크루들끼리 방학 때 뭐해?라는 말을 많이 주고 받았다. 나는 방학 때 하고 싶었던 것 중 제일 큰 것은 `레벨 1 때 놓친 키워드들을 다시 제대로 배우는 것`이다. 레벨 1 마지막 쯤에 돌아보기 활동을 하면서 내가 아는 것을 백지에 쭉 써보았었는데, 내가 깊게 학습하지 않았다는 것을 깨달았다. 키워드를 나열할 뿐 깊이 있게 서술하지 못하였고, 레벨 1 동안 미션 코드를 잘 작성하는 것에만 매몰되어 학습 키워드를 많이 놓쳤던 것 같았다. 그래서 이번 방학 때는 적당히 놀고 꾸준히 공부하기를 목표로 삼았다. 방학이 다 지난 지금 시점에서 방학 때 무엇을 했는 지 적어보자면 ... 레벨1 브라운..

우아한테크코스/레벨2

[Spring] 문자열 경로를 반환하는 API를 호출하면 웹 페이지가 렌더링되는 이유는 뭘까? (feat. ViewResolver)

💬 정적 페이지와 동적 페이지 정적 페이지 src/resources/static/admin/index.html 라는 파일이 있다고 하자. 이 html 코드를 특정 URL을 입력했을 때 웹 페이지로 띄우고 싶다. 이 때 스프링에서 지원하는 정적 컨텐츠 기능을 사용할 수 있다. 아래와 같이 html 파일 경로를 포함하여 문자열을 반환하고 실행하였다. localhost:8080/admin을 주소창에 입력하면 내가 만든 index.html 파일이 뜨는 것을 확인할 수 있다. @GetMapping("/admin") public String getAdminPage() { return "/admin/index"; } 이렇게 Static Resource의 경로만 반환했을 뿐인데 html이 웹 페이지로 렌더링되었다. 📝..

우아한테크코스/레벨2

[Spring] @ResponseBody와 ResponseEntity의 차이점과 동작 원리

스프링 어플리케이션을 개발하다보면 @ResponseBody나 ResponseEntity와 같이 응답과 관련한 스프링 프레임워크에 정의된 요소들을 사용하게 된다. 🔥 역할 @ResponseBody와 ResponseEntity의 공통적인 역할은 응답 객체를 JSON으로 직렬화한다는 것이다. 코드를 통해 알아보자. 📝 직렬화란? 객체를 직렬화한다는 것은 객체를 송수신이 가능한 형태로 변형하는 것이다. 네트워크 상에서는 Byte 단위로 데이터를 전달하는데, 서버와 클라이언트의 데이터 통신을 위해 객체를 직렬화하는 과정이 필요하다. @ResponseBody @GetMapping("/reservations") public List getReservations() { return adminRepository.getR..

MINGYUM
'우아한테크코스' 카테고리의 글 목록