목록전체 글 (63)
쏭의 개발 블로그
Spring 프로젝트에서 WebClient를 사용하여 Open API를 호출하도록 구현해보면서 Spring WebFlux와 WebClient에 대해서 학습을 했었다. (물론 Servlet 애플리케이션이어서 WebClient만 사용하긴 했지만!) 평소에 개인 노션에 기록해뒀는데 블로그에도 작성해보려고 한다! [1] WebFlux란 클라이언트, 서버에서 Reactive 스타일의 애플리케이션 개발을 도와주는 스프링 모듈이다. 반응형 프로그래밍을 통해 높은 처리량과 확장성을 갖는 애플리케이션을 만드는 목적으로 reactive-stack web framework로 non-blocking과 reactive stream을 지원한다. 특징 Single-Thread와 Non-Blocking 방식을 사용하여 적은 수의 스..
https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 이 문제는 상반기에 쳤던 기업 코테 문제를 비슷했다. 그 때는 이 문제를 못 풀었는데 빗물 문제를 일찍 풀었다면 좋았을 듯 문제 풀이 이 문제의 알고리즘을 생각하는데 꽤 오랜시간이 걸렸다. 막상 보니까 생각보다 간단했던 것 같다. 위 그림을 보면 특정 위치의 물의 높이는 해당 위치를 기준으로 오른쪽에서 가장 높은 블록의 높이와 왼쪽에서 가장 높은 블록의 높이 중 최소값이다. 이 ..
https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 이 문제도 벽 부수고 이동하기 문제만큼이나 오랜 시간이 걸린 문제다. 문제 문제를 요약하면 다음과 같다 n*n 크기의 공간에 물고기 m마리, 아기 상어 1마리가 있다 (아기상어와 물고기는 크기를 가짐) 아기상어는 1초에 상하좌우 중 하나 1칸을 이동하고 물고기를 먹으면 그 칸은 빈칸이 됨 아기상어의 초기 크기는 2 아기상어 크기 > 물고기 크기 : 먹을 수 있고 지나갈 수 있음 아기상어 크..
https://www.acmicpc.net/problem/2615 2615번: 오목 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호 www.acmicpc.net 문제 오목 문제를 요약하면 다음과 같다. 가로, 세로 19줄씩 있는 바둑판 같은 색의 바둑알이 연속으로 5알이 놓이면 이김 - 가로, 세로, 대각선 6알 이상 연속적으로 놓이면 이긴 것이 아님 검은 바둑알 1, 흰 바둑알 2, 알이 놓이지 않는 자리는 0 바둑판 상태가 주어졌을 때, 검은색과 흰색 중 누가 이겼는지 or 비겼는지 판단하는 프로그램 풀이 먼저 모든 2차원 바둑알의 위치를 위부터 아래..
1. DAO : Data Access Object (= Repository) DB의 데이터에 접근하기 위한 객체로 DB에 접근하기 위한 로직과 비즈니스 로직을 분리 repository 패키지 실제로 DB에 접근하여 데이터를 CRUD하는 객체로 Service와 DB를 연결해주는 역할 인터페이스와 구현체를 만들어 CRUD 관련 기능을 구현하고 DI 해줌 SQL을 사용하여 DB에 접근한 후 적절한 CRUD API를 제공 MyBatis 등을 사용할 경우 커넥션 풀까지 제공되므로 별도로 만드는 경우는 적음 2. DTO : Data Transfer Object 계층 간 데이터 교환을 하기 위해 사용하는 객체로 로직을 가지지 않는 순수한 데이터 객체 DTO 패키지 getter, setter만 가짐 DB에서 데이터를 ..
[1] Docker란? 컨테이너 기반의 오픈소스 가상화 플랫폼 다양한 프로그램들과 실행환경을 컨테이너로 규격화시켜 프로그램의 배포 및 관리를 단순화 실행에 필요한 모든 dependency들도 컨테이너에 담기 때문에 다른 환경에서도 빠르게 애플리케이션을 실행 가능 Go 언어로 작성된 리눅스 컨테이너 기반 오픈소스 가상화 플랫폼 💡 가상화를 사용하는 이유 CPU 사용률이 낮은 서버들을 그대로 두면 리소스 낭비, 금전적 낭비 모든 서비스를 한 서버에 올리면 안정성이 좋지 않음 ⇒ 안정성을 높이고 리소스를 최대한 활용하기 위해 서버 가상화 사용 💡 컨테이너란? 가상화 기술 중 하나로 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식 💡 어떻게 개발/실행 환경이 달라도 컨테이너로 규격화한 프로그램들이 정상적으..
[1] 요구사항 문제의 해결 또는 목적 달성을 위해 고객에 의해 요구되거나, 표준이나 명세 등을 만족하기 위해 시스템이 가져야하는 서비스 또는 제약 사항 소프트웨어 개발이나 유지보수 과정에서 필요한 기준과 근거 제공 개발에 참여하는 이해 관계자 간의 의사소통을 원활하게 해줌 유형 기술 내용 기능적 요구사항 비기능적 요구사항 기술 관점, 대상의 범위 시스템 요구사항 사용자 요구사항 [2] 기능적 요구사항 제품 구현을 위해 소프트웨어가 가져야할 기능적 속성 EX) 파일 저장 기능, 편집 기능 등 시스템은 어떤 서비스를 제공하는가 어떤 입력이 주어졌을 때 어떻게 반응하는가 어떤 상황에서 어떻게 행동하는가 시스템이 무엇을 해야하는지 설명 [3] 비기능적 요구사항 제품 품질 기준 등 만족을 위해 소프트웨어가 가져..
💡요약 (1) @Controller와 @RestController 차이점 ⇒ HTTP Response Body가 생성되는 방식 (2) @RestController = @Controller + @ResponseBody (3) 비교 [1] @Controller Model 객체를 만들어 데이터를 담고 View를 반환하는 것 클래스를 Spring MVC 컨트롤러로 표시하는 데 사용됨 @Target(value=TYEP) @Retention(value=RUNTIME) @Documented @Component public @interface Controller 동작구조 (1) Controller - View 클라이언트의 요청으로부터 view를 반환 Controller가 view를 반환하기위해 View Resolver..