오늘은 시니어 멘토님의 특강이 있었다. 사전에 질문을 받아서 그 질문에 대해 답변을 해주는 방식으로 진행됐다. 많은 사람들이 질문을 남겼는데 공통적이었던 부분은 '항해 끝나고 뭐 공부해야 하나요?'였던 것 같다. 나 역시도 정해진 커리큘럼을 따라가다가 홀로서기를 해야하는 순간부터 무엇을 어떻게 공부해야 하는 가에 대한 고민이 있었기에 주의 깊게 들었다. 시니어 멘토님께서 핵심적으로 강조하신 부분은 '개선'이었다. 백엔드 개발자로서 하는 업무가 보통 CRUD의 연장선이고 어느정도 CRUD에 익숙해졌다면 스프링에 대한 공부, 디자인 패턴에 대한 공부 등을 통해 내 코드를 개선하는 데에 초점을 맞추고 학습하는 것을 추천해주셨다. 그리고 또 항해에서 추후 실전 프로젝트 주차 때 서비스 런칭팀과 챌린지팀을 나눠서..
이번주 WIL은 IoC, DI 그리고 Bean 에 대해서 정리를 해야 하는데 사실 평일에 IoC와 DI에 대해서는 간략히 정리한 글이 있어 WIL 에서는 Bean 에 대해서만 정리하고자 한다.(IoC, DI) Bean 빈은 스프링의 IoC 컨테이너가 관리하는 자바 객체를 의미한다. 그냥 자바만을 사용할 때는 객체를 사용하기 위해서는 직접 new 를 통해 객체를 만들어줘야 했지만 스프링 프레임워크에서는 우리가 따로 객체를 생성하지 않아도 Bean 으로 지정만 해주면 프레임워크가 객체를 만들어서 필요한 곳에 주입해준다. 빈으로 등록하고 싶은 클래스에 @Component 어노테이션을 붙이고 Application 에 @ComponentScan 어노테이션을 붙여 어플리케이션을 실행시키면 @Component 가 붙..
오늘 겪은 문제 오늘은 페어와 함께 스프링부트로 간단한 인증/인가가 적용된 CRUD 게시판을 만드는 작업을 했다. 팀원이 작성했던 Lv1 코드를 기반으로 기능을 추가하기로 했는데 그 과정에서 예상치 못한 에러를 만났다. 시도해본 방법 1. 서비스 단 디버깅 회원가입 기능을 추가하는 과정에 위와 같은 에러를 만났다. 회원가입 과정은 Lv1 에서 했던 것과 별반 다를바 없이 클라이언트로부터 데이터를 입력 받고, 컨트롤러에서 이를 서비스에 넘긴 후, 서비스에서는 내부 로직에 따라 처리하고 DB에 저장한 후 그 결과를 컨트롤러에게 반환한다. 컨트롤러는 반환받은 결과를 클라이언트에게 전달하는 것으로 회원가입이 마무리가 된다. 컨트롤러는 단순히 데이터를 받고, 전달하는 역할을 수행하기에 서비스 단에서 문제가 있을 ..
IoC 와 DI 에 대해서 정리하려 합니다. IoC 와 DI 가 구체적으로 무엇인지 설명하기 전에 둘 사이의 관계를 짚고 넘어가면 좋을 것 같습니다. IoC 는 어떠한 개념이고 DI는 이러한 개념을 구현하기 위한 디자인 패턴이라고 이해하면 됩니다. IoC(Inversion of Control) 말 그대로 '제어의 역전'입니다. 보통 라이브러리와 프레임워크의 차이를 이야기할 때 '제어권이 누구한테 있느냐?'하는 이야기를 많이합니다. 일반적으로 우리가 개발을 할 때는 제어의 주도권은 당연히 개발자에게 있습니다. 개발자가 원하는 시점에 객체를 생성하고, 메서드를 호출하는 식으로 말이죠. class A { private B b; public A() { this.b = new B(); } } class B { }..
오늘은 스프링 Lv1 과제를 제출했다. 과제를 제로부터 설계하고 만들어가면서 MVC 패턴에 대한 이해를 좀 더 할 수 있었고 설계한 대로 만들었을 때 잘 동작하는 것을 보고 뿌듯함을 느낄 수도 있었다. 그리고 함께 항해를 이어가는 동료가 과제를 하는 데 어려움을 겪고 있어 어떤 게 어려운지 물어봤더니 나처럼 Dto? Entity? 언제 Dto 를 쓰는 거고 언제 Entity 를 쓰는 거지? 이 생성자는 왜 만드는 거지? 이런 부분들에 대한 어려움을 겪고 있었다. 그래서 동료에게 열심히 설명해주었고 동료도 혈이 뚫린 기분이라며 매우 만족했다. 오늘 TIL은 내가 동료에게 알려준 부분에 대해서 정리하려 한다. DTO ? Entity? 먼저 dto 객체와 entity 객체다. @Entity 어노테이션을 붙여서..
이번 주는 스프링을 학습하면서 라이브 특강도 듣게 되었는데 라이브 특강에서 HTTP 와 MVC 디자인 패턴에 대해서 배워 간단하게 정리를 해보려고 한다. HTTP 매번 주소창에 url로 입력해서 어디 접속할 때마다 http~~ https:~~ 이런 것 치긴 했는데 이게 뭔지는 이번 특강을 통해서 처음 알게 되었다. HTTP란 Hypertext Transfer Protocol 의 약자로 웹 브라우저 같은 곳에서 서버에게 필요한 정보를 요청하는 방법이다. 일종의 약속같은 거라고 생각하면 된다. HTTP는 크게 헤더와 바디로 구성되는데 헤더에는 HTTP 요청에 대한 정보들이 담기고 바디에는 서버에게 전달하려는 데이터가 담긴다. HTTP 메서드 종류 웹 브라우저가 서버에게 요청을 보내는 방법은 크게 4가지가 있..
오늘 MVC 구조를 공부하면서 헷갈렸던 DTO 와 VO 에 대해서 정리해보려고 한다. DTO(Data Transfer Object) MVC 구조에서는 계층을 크게 3계층으로 나눈다. 프레젠테이션 계층, 서비스 계층, 영속 계층. 계층들 간에 데이터를 주고 받을 일이 많은데 보통 하나의 데이터보다는 여러 데이터를 주고 받는 경우가 많기에 여러 데이터를 하나의 객체로 묶어서 전달을 하게 되는데 이것이 바로 DTO 다. DTO 는 일반적으로 3가지 형식을 지키면서 만들어질 수 있도록한다. 1) 파라미터가 없는 생성자를 가진다. 2) 속성(실질적으로 주고 받으려는 데이터)은 private 접근 제어자로 작성한다. 3) getter 와 setter 를 제공한다. VO(Value Object) 데이터 베이스에서는 ..
오늘 처음으로 스프링 학습에 들어갔는데 너무 당황스러웠다. 어노테이션이 등장하면서 내가 알던 자바의 법칙이 무너졌기 때문이다. 분명히 구현을 안 했는데 저 어노테이션 하나만 붙였더니 구현이 된 것처럼 동작하는 것을 보고 적지 않은 충격을 받았다. 그래서 오늘 수업에 나왔던 어노테이션에 대해서 정리해보고자 한다. @RequestMapping 클라이언트로부터 온 요청(Request)을 Controller에서 구현한 특정 메서드와 매핑하기 위해서 사용하는 어노테이션이다. @RequestMapping(value, method) 형태로 사용을 할 수 있는데 꼭 메서드가 아니라 클래스에도 매핑을 해줄 수 있다. 클래스에 매핑할 때는 @RequestMapping(value) 형태로 사용을 하고 저 value가 곧 u..