개발 블로그
article thumbnail
[TIL] DAY 17
항해99 2023. 4. 20. 09:30

오늘 겪은 문제 오늘은 페어와 함께 스프링부트로 간단한 인증/인가가 적용된 CRUD 게시판을 만드는 작업을 했다. 팀원이 작성했던 Lv1 코드를 기반으로 기능을 추가하기로 했는데 그 과정에서 예상치 못한 에러를 만났다. 시도해본 방법 1. 서비스 단 디버깅 회원가입 기능을 추가하는 과정에 위와 같은 에러를 만났다. 회원가입 과정은 Lv1 에서 했던 것과 별반 다를바 없이 클라이언트로부터 데이터를 입력 받고, 컨트롤러에서 이를 서비스에 넘긴 후, 서비스에서는 내부 로직에 따라 처리하고 DB에 저장한 후 그 결과를 컨트롤러에게 반환한다. 컨트롤러는 반환받은 결과를 클라이언트에게 전달하는 것으로 회원가입이 마무리가 된다. 컨트롤러는 단순히 데이터를 받고, 전달하는 역할을 수행하기에 서비스 단에서 문제가 있을 ..

[TIL] DAY 16
항해99 2023. 4. 18. 20:16

IoC 와 DI 에 대해서 정리하려 합니다. IoC 와 DI 가 구체적으로 무엇인지 설명하기 전에 둘 사이의 관계를 짚고 넘어가면 좋을 것 같습니다. IoC 는 어떠한 개념이고 DI는 이러한 개념을 구현하기 위한 디자인 패턴이라고 이해하면 됩니다. IoC(Inversion of Control) 말 그대로 '제어의 역전'입니다. 보통 라이브러리와 프레임워크의 차이를 이야기할 때 '제어권이 누구한테 있느냐?'하는 이야기를 많이합니다. 일반적으로 우리가 개발을 할 때는 제어의 주도권은 당연히 개발자에게 있습니다. 개발자가 원하는 시점에 객체를 생성하고, 메서드를 호출하는 식으로 말이죠. class A { private B b; public A() { this.b = new B(); } } class B { }..

[TIL] DAY 15
항해99 2023. 4. 18. 00:25

오늘은 스프링 Lv1 과제를 제출했다. 과제를 제로부터 설계하고 만들어가면서 MVC 패턴에 대한 이해를 좀 더 할 수 있었고 설계한 대로 만들었을 때 잘 동작하는 것을 보고 뿌듯함을 느낄 수도 있었다. 그리고 함께 항해를 이어가는 동료가 과제를 하는 데 어려움을 겪고 있어 어떤 게 어려운지 물어봤더니 나처럼 Dto? Entity? 언제 Dto 를 쓰는 거고 언제 Entity 를 쓰는 거지? 이 생성자는 왜 만드는 거지? 이런 부분들에 대한 어려움을 겪고 있었다. 그래서 동료에게 열심히 설명해주었고 동료도 혈이 뚫린 기분이라며 매우 만족했다. 오늘 TIL은 내가 동료에게 알려준 부분에 대해서 정리하려 한다. DTO ? Entity? 먼저 dto 객체와 entity 객체다. @Entity 어노테이션을 붙여서..

[TIL] DAY 13
항해99 2023. 4. 16. 20:16

오늘 MVC 구조를 공부하면서 헷갈렸던 DTO 와 VO 에 대해서 정리해보려고 한다. DTO(Data Transfer Object) MVC 구조에서는 계층을 크게 3계층으로 나눈다. 프레젠테이션 계층, 서비스 계층, 영속 계층. 계층들 간에 데이터를 주고 받을 일이 많은데 보통 하나의 데이터보다는 여러 데이터를 주고 받는 경우가 많기에 여러 데이터를 하나의 객체로 묶어서 전달을 하게 되는데 이것이 바로 DTO 다. DTO 는 일반적으로 3가지 형식을 지키면서 만들어질 수 있도록한다. 1) 파라미터가 없는 생성자를 가진다. 2) 속성(실질적으로 주고 받으려는 데이터)은 private 접근 제어자로 작성한다. 3) getter 와 setter 를 제공한다. VO(Value Object) 데이터 베이스에서는 ..

[TIL] DAY12
항해99 2023. 4. 15. 19:34

오늘 처음으로 스프링 학습에 들어갔는데 너무 당황스러웠다. 어노테이션이 등장하면서 내가 알던 자바의 법칙이 무너졌기 때문이다. 분명히 구현을 안 했는데 저 어노테이션 하나만 붙였더니 구현이 된 것처럼 동작하는 것을 보고 적지 않은 충격을 받았다. 그래서 오늘 수업에 나왔던 어노테이션에 대해서 정리해보고자 한다. @RequestMapping 클라이언트로부터 온 요청(Request)을 Controller에서 구현한 특정 메서드와 매핑하기 위해서 사용하는 어노테이션이다. @RequestMapping(value, method) 형태로 사용을 할 수 있는데 꼭 메서드가 아니라 클래스에도 매핑을 해줄 수 있다. 클래스에 매핑할 때는 @RequestMapping(value) 형태로 사용을 하고 저 value가 곧 u..

[TIL] DAY 11
항해99 2023. 4. 13. 21:14

오늘 겪은 문제 알고리즘 주차 마지막 날이라서 시험을 봤다. 그 중 지뢰찾기 맵을 만드는 문제를 푸는데 IndexOutOfBoundsException 이 발생했다. 시도한 방법 로직을 다시 생각해봤지만 로직에는 문제가 없다고 생각해 얼마 전 항해 동료에게 배웠던 디버깅을 진행해봤다. IndexOutOfBoundsException 이 발생할 만한 라인(배열에서 값을 꺼내오는 라인)에 브레이크 포인트를 걸고 언제 Exception 이 발생하는 지를 확인했다. 그렇게 확인한 결과 지뢰찾기 맵을 만들기 위해서는 i, j 번째 칸의 주위 8 칸을 확인하는 과정이 필요했는데 이 때 IndexOutOfBoundsException 이 발생하는 것이었다. 해결 방법 인덱스에 조건을 걸어서 배열에서 값을 꺼내오는 인덱스가..

article thumbnail
[TIL] DAY 10
항해99 2023. 4. 12. 21:22

오늘은 동시성 문제에 대해서 학습하면서 알게 된 새로운 개념들에 대해 좀 정리를 해보려고 한다. 1. 원자성 2. 가시성 & CPU Cache 원자성 int i = 1; i = i + 2; 이렇게 코드를 실행하면 2번째 줄의 코드는 한 줄이지만 실제로는 총 3번의 연산이 이루어지는 것이다. 1. i 에 담긴 값을 읽어오고(Read) 2. 여기에 2를 더하고(Modify) 3. 다시 i 에 덮어써준다.(Write) 그래서 각각의 연산 사이에 시간텀이 발생하게 되고 만약 그 시간텀에 다른 스레드에서 i 라는 자원에 접근하면 예상치 못한 결과를 야기할 수 있는 것이다. 원자성이란 공유 자원에 대한 작업의 단위가 더 이상 쪼갤 수 없는 하나의 연산인 것처럼 동작하는것을 의미한다. 당장 i = i + 2 라는 작..

article thumbnail
[TIL] Day 9
항해99 2023. 4. 12. 00:16

오늘 겪은 문제 항해 측에서 제공해 준 강의로 자바 스레드를 학습했는데 강의에서 콘솔에 찍히는 결과와 내 인텔리제이 콘솔에 찍히는 결과가 달랐다. public class Main { public static void main(String[] args) { Runnable task = () -> { try { Thread.sleep(1000); System.out.println(Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("task : " + Thread.currentThread().getName()); }; Thread thread = new Thre..