분류 전체보기 178

[백준] 잠수함 식별 2671 : Java

1. 문제https://www.acmicpc.net/problem/2671 문제 유형 : 문자열목표 : 문자열이 주어진 규칙을 만족하는지 확인하기 2. 접근문제 이해부터 다소 시간이 걸렸다. 표기에 대한 규칙을 쭉 설명한다. 그래서 결국 이 모든 규칙을 만족하는지 찾으라는건가? 했는데 알고보니 하나의 규칙과 일치하는지 찾으면 되는 것이였다. (100~1~|01)~ 이런 규칙으로, 해석해보면 10으로 시작하고 0이 1개 이상 오고, 1이 1개 이상오는 문자열이거나01로 이루어진 문자열이한 번 이상 반복되는 문자열인지 확인하라는 것이다. 나는 prefix(10, 01)가 주어졌으니 그냥 구현하면 되지 않을까? 하고 구현에 시작했다가 결국 못풀었다.생각보다 고려해야하는 것이 많았다. 1001 다음에 바로 0..

카테고리 없음 2026.01.17

서블릿이란? 서블릿의 작동 원리

Spring을 공부하다보면 계속 서블릿을 나오는데 정확히 뭔지를 잘 모르겠다. 알아보자! 서블릿이란 자바로 웹 요청/응답을 처리하기 위해 만들어진 기술이다. HTTP 메시지를 받아서 해석하고, 필요한 로직을 찾아 수행하고, HTTP 응답을 보낸다. 몰랐는데 1999년 쯤 나온 아주 근본 기술이었다. 하지만 이렇게 정의해도 잘 감이 안잡힌다. 대체 구체적으로 무슨 일을 하는걸까? 먼저 HTTP 요청을 처리하기 위해 서버가 하는 일에 대해서 살펴봐야한다. 1. 웹 브라우저는 HTTP 메시지를 만들어서 서버에 요청한다.2. 서버는 HTTP 메시지를 파싱해야 한다.3. ContentType에 따라 body를 해석한다.4. 비즈니스 로직을 실행한다.5. HTTP 응답 메시지를 생성한다.6. TCP/IP에 응답 ..

IT 정보 2026.01.16

PostgreSQL 설치 및 Spring boot연동 (MacOS)

설치2026.01.15 기준 최신버전은 18임. brew install postgresql@16 // 사용 용도에 맞는 버전 설치 컴퓨터 시작 시 자동으로 서버를 시작하도록 설정(선택)brew service start postgresql@16 환경 변수 설정실행 파일인 psql을 찾을 수 있도록 환경변수를 등록한다.echo 'export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"' >> ~/.zshrc PostgreSQL 실행psql postgres 유저 만들기CREATE USER {유저이름} WITH PASSWORD {password}// 예시CREATE USER testUser WITH PASSWORD 'testPW' 슈퍼 유저 권한 부여ALTER US..

개발 일지 2026.01.15

[백준] K-Queen 26006 : Java

1. 문제https://www.acmicpc.net/problem/26006 2. 접근모든 퀸 들을 순회하면서 공격 가능한 지역을 체크하는건가? 했으나 N의 크기가 엄청 크기 때문에 맵에다 표시를 남기는 것은 아니라고 생각했다. 그러면 킹의 좌표와 퀸의 좌표만 가지고 바로바로 공격 가능한 지역에 있는지 확인하기로 했다. 공격 가능한 지역을 문제에 나온대로 따져보면 3가지가 나온다.1. 행이 같을 때2. 열이 같을 때3. 대각선이 같을 때 이는 각 코드로 다음과 같이 표현할 수 있다. 킹의 인접 칸 중 저 로직에 해당하는 것이 있으면 거긴 공격 가능한 지역인 것이다. public static boolean isAttack(int kingR, int kingC, int queenR, int quee..

알고리즘/백준 2026.01.13

[Spring Framework] Spring Web MVC

spring Web MVC는 서블릿 API를 기반으로 구축된 최초의 웹 프레임워크이다. 서블릿이란?"웹 요청/응답을 처리하기 위해 만들어진 자바 클래스이다." Servelet은 Server + Applet(작은 조각)의 합성어이다. 서블릿은 클라이언트가 HTTP 요청을 보내면, 그 요청을 받아서 자바 코드로 로직을 수행하고, 결과를 다시 응답(HTTP Response)해주는 역할을 한다. 즉 HTTP 요청을 받아 해석하고, 필요한 로직 수행하고, 응답을 보내는 기술이다. 하지만 서블릿은 '자바 클래스'일 뿐이라서 총 관리하고 실행시키는 무언가가 필요하다. 그거이 바로 서블릿 컨테이너이다.서블릿 컨테이너는 HTTP 요청이 오면, 해당 요청을 처리할 서블릿을 찾아 일을 시킨다. 해당 서블릿이 작업을 완료..

@RequestBody란?

핵심@RequestBody는 HTTP 요청 본문에 담긴 데이터를 자바의 객체로 변환(역직렬화)해주는 역할을 한다.이때 안쪽 로직에서는 HttpMessageConverter 인터페이스와 Jackson 라이브러리가 사용된다. 작동 원리스프링 부트가 요청을 받아서 컨트롤러까지 도달하는 과정을 알아보자. step1. 문지기 (DispatcherServlet)HTTP 요청이 들어오면 스프링의 제일 앞단에 있는 DispatcherServlet 이 요청을 받는다. step2. 해결사 (HandlerAdapter & ArgumentResolver)스프링은 컨트롤러 메서드를 실행하기 전에, 파라미터 앞에 @RequestBody가 붙어있는 것을 확인한다. 바로 전달을 하면 안되고, 객체로 만들어서 줘야 함을 알아차린다..

JSON parse error: Cannot deserialize value of type

Springboot에서 @RequestBody 어노테이션을 사용하여 http body를 받는데 파싱 에러가 난다. JSON parse error: Cannot deserialize value of type `java.util.ArrayList` from Object value (token `JsonToken.START_OBJECT`)]에러 문구를 보면 parse error가 나서 json을 객체로 바꾸지 못하고 있다. DTO 정의가 잘못 된 것 같다. 현재 controller단 로직은 이렇다.@PutMapping("/api/block")public ResponseEntity saveBlock(@RequestBody BlockRequestDto rootBlock){ System.out.println..

[프로그래머스] 표 편집 - Java

문제https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 알고리즘스택, 구현 접근추가와 삭제가 빈번 -> linked List 이용결과 : 정확성 통과, 효용성 all 시간초과 why?요소의 개수는 최대 1000,000(백만 개)이고 cmd 연산은 최대 200,000(이십 만)개 임. Linked List로 add 하는 경우- 내부적으로 포인터 사용하니깐, 해당 인덱스에 있는 요소의 포인터를 새로 추가한 요소에 잇고, 새로 추가한 요소 포인터도 다음을 가리키도 하면 끝이지 않나? 그럼 O(1) remov..