개발 블로그
[WIL] 항해 2주차
항해99 2023. 4. 17. 09:05

이번 주는 스프링을 학습하면서 라이브 특강도 듣게 되었는데 라이브 특강에서 HTTP 와 MVC 디자인 패턴에 대해서 배워 간단하게 정리를 해보려고 한다. HTTP 매번 주소창에 url로 입력해서 어디 접속할 때마다 http~~ https:~~ 이런 것 치긴 했는데 이게 뭔지는 이번 특강을 통해서 처음 알게 되었다. HTTP란 Hypertext Transfer Protocol 의 약자로 웹 브라우저 같은 곳에서 서버에게 필요한 정보를 요청하는 방법이다. 일종의 약속같은 거라고 생각하면 된다. HTTP는 크게 헤더와 바디로 구성되는데 헤더에는 HTTP 요청에 대한 정보들이 담기고 바디에는 서버에게 전달하려는 데이터가 담긴다. HTTP 메서드 종류 웹 브라우저가 서버에게 요청을 보내는 방법은 크게 4가지가 있..

[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
스레드 동기화(synchronized)
Java 2023. 4. 12. 14:52

이번에는 Java에서 스레드 동기화를 할 때 사용하는 synchronized 에 대해서 알아보려 합니다. 동시성 문제와 동기화 자바에서 여러 스레드가 공유 자원에 동시에 접근하게 되면 의도와 다르게 잘못된 결과가 나올 수 있는데 이를 동시성 문제라고 하고 이를 해결하는 방법을 동기화라고 합니다. 여러 스레드가 공유 자원에 동시에 접근할 경우 어떤 일이 발생하는지 예제를 통해 살펴보겠습니다. class Temp { public void methodA() { System.out.println(Thread.currentThread.getName() + " lock this method"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.prin..

article thumbnail
10799번. 쇠막대기
Algorithm/백준 알고리즘 2023. 4. 12. 10:23

아이디어 1. ")" 를 만났을 때 직전 값이 "(" 면 레이저를 그렇지 않으면 막대의 끝을 의미하게 된다. 2. "(" 를 만날 때마다 막대의 갯수를 카운팅하다가 ")" 를 만나면 1번 기준에 따라 레이저일 경우 현재 위치에 놓인 막대들[ 아직 ")" 쌍을 만나지 않은 "("]을 자르고 3. 그렇지 않으면 카운팅(레이저가 아닌 경우를 카운팅하면 원본 막대의 갯수를 알 수 있음)을 해서 정답에 더해준다 풀이 코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String expr = sc.nextLine(); int answer =..

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..