전체 글 140

[Python][백준] 14501_퇴사

https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 더보기 더보기 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일2일3일4일5일6일7일TiPi 3 5 1 1 2 4 2 10 20 10 20 ..

[SpringBoot] 공통 Response 포맷 적용하기

사이드 프로젝트를 진행하면서 어떻게 체계적으로 Request에 대한 Response 공통 포맷을 적용할 수 있을지 고민해봤다. 문제 해결을 위한 과정은 이러했다. 1. Success / Error 상황을 모두 담을 수 있는 하나의 공통 Response Class를 설계하자. 2. Controller에서는 Success / Error Info 를 담은 객체만을 리턴하자. 2-1. Success시 결과 클래스 생성 2-2. Exception 발생 시 에러 결과 클래스 생성 3. Controller의 return값을 AOP를 통해 공통 Response Class에 담아 책임을 분산하자. 4. Controller Unit Test를 통해 정상적으로 동작하는지 테스트 각 스텝별로 개발 내용을 조금 상세하게 정리해..

[SpringBoot] Enum타입을 DB에 변환 저장하는 법

Mybatis를 사용하여 DB에서 User정보를 가져오는 부분에서 다음과 같은 에러가 발생했다. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'USER_ROLE' from result set.... User 클래스에 해당 사용자가 SELLER인지 ORDERER인지를 구분하는 USER_ROLE이라는 Enum을 사용하고 있는데, DB에서는 USER_ROLE을 INTEGER타입으로 저장하고 있기 때문에 값을 불러오는데에서 타입변환 문제가 발생한 것이다. - User class @AllArgsC..

[SpringBoot] Mybatis를 사용한 Service 테스트 코드 작성하기

id, password를 입력해서 login을 수행하는 service의 JUnit 단위 테스트 코드를 작성하였다. 여러 시행착오가 있었는데,, 문제를 해결하면서 찾아간 Mybatis가 쓰이는 테스트코드의 작성법을 정리해봤다. (JUnit5, Maven 기준) 1. MyBatis-Spring-Boot-Starter-Test 사용하기 MyBatis component를 사용하는 테스트코드를 작성하기 위해 아래 의존성을 pom.xml에 추가해준다. org.mybatis.spring.boot mybatis-spring-boot-starter-test 2.2.0 test 이제 @MybatisTest 어노테이션을 테스트 클래스에 사용하여 Mybatis Component(Mapper Interface, SqlSessi..

[SpringBoot] PetClinic 샘플 프로젝트 - 빌드 및 실행하기

좋은 코드를 많이 보아야 좋은 코드를 작성할 수 있을것 같아 스프링 공식 예제 프로젝트인 "PetClinic"을 내려받았다. 프로젝트의 시작은 세팅이 반에 가까울 정도로 중요하기에, 프로젝트 세팅과정을 정리해봤다. 0. 시작하기에 앞서 [프로젝트 환경] - framework: Spring Boot 2.5.5 - server: Apache Tomcat/9.0.53 [실습 환경] - os: Windows 10 - ide: IntelliJ - java: OpenJDK 17 1. git clone github에 올라온 프로젝트를 로컬에서 띄우기 위해 IntelliJ에서 clone을 해보자. IntelliJ의 get from VCS - Repository URL 메뉴에서 다음 주소와 저장할 directory를 입..

[OS] 다중 프로그램을 메모리에 할당하는 방법 (고정 분할, 가변 분할)

모든 프로세스는 서로 다른 메모리 사이즈( 4GB, 8GB, 16GB ...)를 가지는 PC에서 모두 동일하게 실행되어야 한다. 프로세스마다 크기가 다르기 때문에 메모리의 구역을 나누는 방식은 중요한 문제가 되는데, MMU(Memory Manage Unit)라고 불리는 메모리 관리자는 fetch(메모리로 가져옴), placement(배치), replacement(재배치)를 수행하여 메모리에서 운영체제와 다양한 프로세스의 구역을 나누어 작업공간을 확보한다. 다중 프로그래밍 환경에서 fetch 수행 시에 프로세스은 고정(page)/가변(segmentation) 사이즈로 분할되어진 메모리에 할당되어지고, 메모리에 더이상 새로운 프로세스를 할당할 공간이 부족할 경우에는 이전 프로세스를 스왑영역(Swap Area..

CS/OS 2021.11.14

[OS] 프로그램이 메모리 사이즈보다 크다면? - 메모리 오버레이 기법

다음과 같은 상황을 생각해보자. - 메모리의 용량이 작을 때 이보다 큰 사이즈의 프로그램을 실행시키려면 어떻게 해야할까? - 고정 분할방식으로 나뉜 메모리의 page 사이즈보다 프로그램의 사이즈가 크면 어떻게 해야할까? 메모리공간 < 프로그램사이즈인 위와 같은 상황에서는 프로그램을 쪼개어야 메모리에 할당할 수 있다. 이 때 프로그램의 명령어와 데이터들(instructions and data)을 Module로 나누어 먼저 실행되어야하는 모듈을 메모리에 우선적으로 할당하고, 다음 모듈을 실행하기 위해서는 이전의 모듈을 swap area로 옮겨 메모리를 관리하는 방식을 메모리 오버레이 기법이라고 한다. 1번의 예에서 메모리 오버레이 기법을 통해 메모리를 관리하는 방법을 자세히 살펴보면 다음과 같다. - 현재에..

CS/OS 2021.11.14

[Python][프로그래머스] 72413_합승 택시 요금

2021 KAKAO BLIND RECRUITMENT https://programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 더보기 문제 설명 [본 문제는 ..

[Python][프로그래머스] 72411_메뉴 리뉴얼

2021 KAKAO BLIND RECRUITMENT https://programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 더보기 문제 설명 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 새로운 메뉴를 제공하기로 결정했습니다. 어떤 단품메뉴들을 조합해서 코스요리 메뉴로 구성하면 좋을 지 고민하던 "스카..

[Java] LinkedList 파헤쳐 보기

Java의 ArrayList의 실제 구현코드를 살펴보았던 이전 게시글에 이어서 LinkedList도 소스코드를 파헤쳐보자. (참고: 2021.10.06 - [Language/Java] - [Java] ArrayList 파헤쳐 보기) Doubly-linked list implementation of the List and Deque interfaces. LinkedList는 이전/이후의 리스트와 연결되어 있는 구조이다. 이는 다음과 같은 특징을 가진다. o element 갯수에 대해 정해진 limit 없음 o Reference Type만 가질 수 있음 o Thread Safe 하지 않음 ArrayList가 내부적으로 Object[]으로 이루어졌던거에 비해 LinkedList는 Node로 이루어져있다. 코드..

Language/Java 2021.10.06