전체 글

slow but steady wins the race
우테코 5기

[레벨 3 회고] 하루스터디 협업 1주차 회고

긴 것 같으면서도 짧았던 레벨 3 첫주차가 종료되었습니다. 그래서 이번 주에 느꼈던 것들, 학습했던 것들 위주로 회고를 작성하고자 합니다. 사실 여태까지는 일일 회고나 주간 회고를 작성하지 않았는데, 협업을 진행하게 되면서 주간 회고도 되게 유의미할 것 같다는 생각이 들어 시작하게 되었습니다..! 우리 모두가 기획자 레벨2 회고에서 언급했던 것처럼, 저는 이번 레벨3 프로젝트의 기획자 역할을 맡게 되었습니다. 그래서 총 7명의 팀원(엽토, 노아, 룩소, 히이로, 마코, 모디, 나)들은 내가 제시한 주제로 프로젝트를 하게 되었는데, 처음에는 걱정이 많았습니다. 기획자라는 역할을 경험해보지 못했기 때문입니다. 사실 제대로 된 협업도 이번이 처음이라, 방학 때 이런저런 걱정이 있었던 것 같습니다. 그런데 레벨..

우테코 5기

우아한테크코스 레벨2 회고

우아한테크코스 레벨2가 종료되었습니다. 레벨2는 유난히 다사다난했는데, 이 과정에서 느꼈던 점들을 기록하고자 합니다. 저번 레벨 1 회고와 마찬가지로 1. 학습 측면에서의 회고, 2. 생활 측면에서의 회고를 진행하고자 합니다 😀 https://dev-ws.tistory.com/49 우아한테크코스 레벨1 회고 우아한테크코스에 온 지 두 달이 지났고, 현재 방학을 맞이해 회고를 작성하고 있다. 정말 많은 일들이 있었고, 순식간에 지나간 레벨 1이었지만 그래도 보람찼다고 생각한다. 그래서 생활과 학 dev-ws.tistory.com 학습 측면에서 학자와 엔지니어 레벨 2 초반에 코치분들이 자주 하시던 말씀이 기억이 납니다. "스프링은 학습 범위가 넓고, 모든 것을 학습할 수 없으니 필요한 부분만 학습해라. 깊..

우테코 5기

[레벨 2 미션] 쇼핑 주문 협업 미션 학습 기록(2)

예외 객체와 상태코드 분리 지하철 미션을 진행하면서 리뷰어님과 '비즈니스 영역의 예외 객체가 상태코드까지 갖고 있는게 맞는가' 에 대한 이야기를 여기에서 나눈 적이 있었습니다. 그리고 리뷰어님이 실무에서는 어떻게 예외 객체와 상태코드를 처리하는지 보여주셨는데, enum을 통해 비즈니스 계층의 예외와 상태 코드를 표현 계층에서 매핑하고 있는 모습이었습니다. 좋은 방법이라는 판단이 들어서 이번 미션에서 이를 적용해보고 싶었고, enum 객체를 만들어 예외 객체와 상태코드를 공통적으로 관리했습니다. 이를 통해 ExceptionHandler에서 로깅 등의 작업에만 집중할 수 있게 되었습니다. 대략 아래와 같은 형태인데, 자세한 내용은 프롤로그에 작성해두어서 링크도 함께 첨부하겠습니다. public enum Ex..

JPA

영속성 컨텍스트 기본 개념 알아보기

영속성 컨텍스트란? 오라클 공식 문서에는 영속성 컨텍스트가 다음과 같이 정의되어 있습니다. 영속성 컨텍스트란, 모든 영속성 엔티티 ID에 대해 고유한 엔티티 인스턴스가 있는 인스턴스 집합이다. 영속성 컨텍스트 내에서 엔티티 인스턴스 및 엔티티 인스턴스의 라이프사이클이 관리된다. 엔티티 인스턴스(Entity Instance)란, 하나의 데이터베이스의 테이블과 매칭되는 클래스의 인스턴스를 의미합니다. 내용이 조금 이해하기 어려우나, 보다 쉽게 다시 한번 정리하면 다음과 같습니다. 영속성 컨텍스트는 엔티티 인스턴스에 대한 1차 캐시로서 작동한다. 영속성 컨텍스트는 엔티티 인스턴스와 그들의 라이프사이클을 관리한다. 이런 영속성 컨텍스트는 어플리케이션과 영속성 저장소 사이에 위치합니다. 즉, 어플리케이션은 데이터..

우테코 5기

[레벨 2 미션] 쇼핑 주문 협업 미션 학습 기록(1)

이번 미션은 첫 협업 미션이었습니다. 프론트엔드 크루분들을 포함해 총 5명으로 구성된 팀으로 협업을 진행했습니다. 그 과정에서 얻었던 다양한 경험들을 기록하고자 합니다. 배포 및 인프라 협업 미션을 진행하면서, 백엔드는 기본적인 뼈대 코드를 제공받았습니다. 이 뼈대 코드를 통해 우선 배포 및 인프라 구성을 해보는 것이 첫번째 미션이었습니다. 그리고 이 과정에서 계정을 지급받아 AWS를 사용했습니다. 배포 플로우는 다음과 같았습니다. 정말 간단하게 구성했는데 이 과정에서 AWS 개념, 네트워크 개념, 그리고 다양한 리눅스 명령어들을 접해보게 되었습니다. 각각에 대해 모두 다루기엔 너무 방대해질 것 같아, 이들에 대해서는 아래에 따로 정리하겠습니다. AWS, EC2, VPC, AZ, Subnet? 각 개념에..

우테코 5기

JDBC, SQL Mapper, ORM

영속성이란? 영속성이란 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미합니다. 우리가 일반적으로 코드 레벨에서 다루는 객체는 이런 영속성을 가지지 않습니다. 객체는 메모리 상에서만 존재하며 어플리케이션이 종료되면 사라집니다. 우리가 만든 객체들에게 영속성이라는 특성을 부여하려면 어떻게 해야할까요? 쉽게 말해, 객체를 어떻게 영구하게 저장할 수 있을까요? 이런 고민을 해결해주는게 JDBC, SQL Mapper, ORM입니다. 그리고 각각은 다른 특성을 가지고 있습니다. 이번에는 세 가지 기술에 대해 정리해보고자 합니다. JDBC 가장 먼저 살펴볼 영속화 기술은 JDBC입니다. JDBC(Java DataBase Connectivity)는 자바에서 데이터베이스에 접속할 수 있..

우테코 5기

REST 기본 개념 총정리 3편 - 균일한 인터페이스

이전 포스팅에서는 REST란 무엇인지를 살펴보았습니다. REST는 총 6개의 제약조건을 가지고 있었죠. https://dev-ws.tistory.com/72 REST 기본 개념 총정리 2편 - REST의 6가지 제약조건 소개 이번에는 REST란 무엇인지를 알아보겠습니다. 1편인 REST의 등장 배경은 아래 링크를 참고해주세요! https://dev-ws.tistory.com/71 REST 기본 개념 총정리 1편 - REST의 등장 배경 이번에 RESTful API를 주제로 테 dev-ws.tistory.com 그런데 균일한 인터페이스 제약조건의 경우 만족하기가 매우 어렵다고 했습니다. 이번 포스팅에서는 왜 그렇게 어려운지, 어떤 개념을 내포하고 있는지 살펴보도록 하겠습니다. 균일한 인터페이스 균일한 인터..

우테코 5기

REST 기본 개념 총정리 2편 - REST의 6가지 제약조건 소개

이번에는 REST란 무엇인지를 알아보겠습니다. 1편인 REST의 등장 배경은 아래 링크를 참고해주세요! https://dev-ws.tistory.com/71 REST 기본 개념 총정리 1편 - REST의 등장 배경 이번에 RESTful API를 주제로 테코톡 발표를 진행하게 되었고, 발표를 준비하면서 학습했던 자료들을 토대로 REST의 기본 개념을 정리하고자 합니다. 대부분의 내용은 로이 필딩의 논문에서 비롯되 dev-ws.tistory.com 이전 편에서 언급했던 것처럼, 기존 WWW에는 몇가지 문제점들이 존재했습니다. 그리고 이런 문제를 해결하기 위해서 로이 필딩은 REST라는 개념을 제시했는데요. 그렇다면 REST는 무엇일까요? 정말 쉽게 정리하면 'WWW을 위한 제약조건의 집합'이라고 이해해도 될..

우테코 5기

REST 기본 개념 총정리 1편 - REST의 등장 배경

이번에 RESTful API를 주제로 테코톡 발표를 진행하게 되었고, 발표를 준비하면서 학습했던 자료들을 토대로 REST의 기본 개념을 정리하고자 합니다. 대부분의 내용은 로이 필딩의 논문에서 비롯되었으나, 설명을 위해 주관적인 내용이 포함될 수도 있다는 점은 미리 알려드리고자 합니다. REST가 없던 시기, 무엇이 문제였나 REST를 이해하기 앞서, 이전에는 도대체 무엇이 문제였길래 REST라는 개념이 등장했는지를 먼저 살펴봅시다. 1990년대 초반에 WWW(World Wide Web)은 폭발적으로 사용되기 시작했습니다. 그리고 이를 통해서 사람들은 정보의 공유와 접근을 굉장히 쉽게 할 수 있었습니다. WWW은 단순성과 접근성이 아주 좋았기 때문입니다. 누구나 정보에 접근하고 싶다면 컴퓨터 하나를 들고..

우테코 5기

[레벨 2 미션] 지하철 미션 학습 기록(2)

컨트롤러 - 서비스 DTO 분리 이번 미션에는 컨트롤러와 서비스 간의 통신에 있어 DTO를 사용했습니다. '컨트롤러와 서비스 간에 무엇을 주고받을것인지'는 오랜 관심사이기도 했는데요. 1. 도메인 객체를 주고받는 방법, 2. 표현 계층의 DTO를 주고받는 방법 모두 시도해봤기에 이번엔 조금 다른 방법을 시도해봤습니다. 바로 서비스 전용 DTO를 생성하는 것입니다. 물론 실무에서 적용할 수 있을지에 대해서는 확신이 들지는 않지만 연습 과정에 있어서는 큰 도움이 될 것 같았기 때문입니다. 구조는 다음과 같습니다. public void enrollStation(@Valid EnrollStationCommand command) { Line line = lineRepository.findById(command.g..

teo_99
테오의 학습기록