분류 전체보기 (125) 썸네일형 리스트형 DDD를 위한 일대다 연결관계 매핑 요구사항 정의 시험은 N개의 문제를 가진다. 문제 등록은 시험이 있어야 가능하다. 문제의 생성, 수정, 삭제, 조회는 시험을 통해서만 가능하다. 시험이 삭제되면, 문제들도 삭제된다. 시험과 문제는 각각 유니크한 식별자를 가진다. 하위 엔티티들을 관리하기 위한 전략 시험에 있어서 문제는 관리해야 할 하위 엔티티이다. 시험을 통해서만 문제가 등록되도록 영속성 전이 옵션 (cascade)을 사용한다. 생성, 수정, 삭제의 관점에서 보자. 생성은 상위 엔티티의 컬렉션에 하위 엔티티를 넣어 영속 상태로 만들면 JPA에서 insert 해준다. 수정은 조회 후 컬렉션의 원소를 수정하여 영속 상태로 만들면 JPA에서 update 해준다. 삭제는 조회 후 컬렉션의 원소를 삭제하여 영속 상태로 만들면 JPA에서 delet.. JPA 생성 날짜, 수정 날짜 자동으로 넣어주기 JPA에서 ORM을 이용해 데이터베이스의 컬럼과 매핑할 때 공통적으로 들어가는 기능들이 있다. 대표적으로 생성 일자나 수정 일자 등이 있는데, 비즈니스 로직상 들어가지 않는 경우도 있겠지만 대부분 공통적으로 들어간다. 그래서 미리 만들어 놓은 기능이 있다. Autiting(감시) 옵션인데, 엔티티들의 변경을 감지하여 필드를 갱신하게 된다. 이러한 변경 감지 옵션을 사용하기 위해선 스프링부트에서 활성화하려면 @EnableJpaAuditing 어노테이션을 붙여줘야 한다. @SpringBootApplication @EnableJpaAuditing public class BookshopApplication { public static void main(String[] args) { SpringApplicatio.. 자바 어노테이션 스프링 프로젝트를 생성하면 @Component와 같은 키워드가 달려있는걸 볼 수 있다. 이걸 자바에선 어노테이션이라 부르는데, 클래스, 메서드, 변수에 달 수 있다고 한다. 어노테이션은 무엇인가? 어노테이션이란 프로그램에 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다. 여기서 메타데이터란 어플리케이션이 처리해야 할 데이터가 아니라 컴파일 과정과 런타임에서 코드를 어떻게 컴파일하고 처리할 것인지에 대한 정보를 말한다. 이 메타데이터를 잘 이용하면 비즈니스 로직과 분리하여 대상의 유효성 검증, 값 주입, 역할 부여(기능 주입) 등을 수행할 수 있어 코드를 좀 더 깔끔하게 작성할 수 있게 된다. 어노테이션은 옵션에 따라 컴파일 전까지만 유효하도록 처리될 수 있고, 컴파일 시기에 처리될 수도 있고, 런타.. 1719 택배 https://www.acmicpc.net/problem/1719 1719번: 택배 명우기업은 2008년부터 택배 사업을 새로이 시작하기로 하였다. 우선 택배 화물을 모아서 처리하는 집하장을 몇 개 마련했지만, 택배 화물이 각 집하장들 사이를 오갈 때 어떤 경로를 거쳐야 하 www.acmicpc.net N이 작고, 시간 제한이 작기 때문에 플로이드 와샬 알고리즘으로 시간 내에 수행이 가능하다. 답안의 요구사항이 제일 첫 번째로 경유하는 지점을 출력하는 것이므로, 최단 거리 갱신을 수행하는 과정에서 시작 지점을 갱신하는 것이 핵심이다. answer[i][j] = i에서 j로 가기 위한 첫 번째 경유 지점 1. 처음에 입력을 받으면서 시작 지점을 저장한다. 2. 최단거리 갱신 과정에서 경유하는 지점을 기록한.. 모던 자바인액션 1장 자바 8 이후 부터는 간결한 코드, 멀티코어 프로세서의 쉬운 활용이라는 요구사항에 맞춰 진화하였다. 왜 아직도 자바는 변화하는가? 기술의 흐름에 맞추지 못하는 언어는 다른 경쟁 언어에 비해 도태될 수 밖에 없다. 하드웨어가 발전함에 따라 빅데이터를 다루게 되었고, 멀티코어 컴퓨터나 컴퓨팅 클러스터를 이용해서 빅데이터를 효과적으로 처리할 필요성이 커졌다. 그러나 자바 8이전 버전에서는 이러한 요구사항을 만족시킬 수 없었다. 자바 8 설계 컨셉 스트림 처리 유닉스 계열의 운영체제에서는 '|' 키워드로 다른 프로그램에게 데이터를 전달할 수 있다. 이런 방식은 간결함과 동시에 병렬성을 수행할 수 있는데, 다음과 같은 예제를 보자. cat file1 file2 | tr "[A-Z]" "[a-z]" | sort |.. 15658 연산자 끼워넣기(2) https://www.acmicpc.net/problem/15658 15658번: 연산자 끼워넣기 (2) 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대 www.acmicpc.net next_permutation으로 간단하게 해결될 문제인 줄 알았지만, 시간초과가 났다... next_permutation은 순열을 만드는 함수이기 때문에 O(n!)으로 동작하고, 시간복잡도를 계산해보니 최대 44!로 초과가 날만한 수치였다. 그래서 다른 블로그를 참고하여 재귀방식으로 해결하였다. 핵심은 i번째 인덱스의 연산자 개수가 0보.. 20152 Game Addiction https://www.acmicpc.net/problem/20152 20152번: Game Addiction 첫째 줄에 집과 PC방의 좌표 (H, H), (N, N) 을 나타내는 두 정수 H, N (0 ≤ H, N ≤ 30) 이 차례로 주어진다. www.acmicpc.net 꽤 헷갈렸던 문제였다. 연습이 더 필요한 것 같다. 힌트를 참고하여 풀었는데, 방식은 다음과 같다. 1. 집 -> 피시방, 피시방 -> 집까지 가는 경우의 수를 통일하기 위해 작은 좌표 -> 큰 좌표로 가도록 계산 2. 작은 좌표 -> 큰 좌표로 가는 경우의 수는 bottom up 방식으로 왼쪽, 위쪽에서 오는 경우의 수가 더해짐 정답코드 #include using namespace std; #define MAX_SIZE 31 int.. [번외] 도커 컴포즈로 스프링부트 앱을 배포해보자 소프트웨어 공학 수업 프로젝트의 일환으로 내가 만든 스프링부트 앱을 다른 사람이 돌려야 했다. 스프링부트로 만든 앱을 배포하는 방법은 jar로 의존 라이브러리들을 한 번에 묶어서 간편하게 배포할 순 있지만... 몇 가지 고려해야할 점들이 있었다. 1. 자바 버전을 맞춰줘야 한다. 내가 사용하는 버전은 11이었다. 2. DB 설정을 맞춰줘야 한다. DB 이름이며, 비밀번호까지 그런데 프론트 개발자 입장에선 자바 개발을 할 것도 아닌데 굳이 설치할 이유가 없었다. 그래서 이번에 컨테이너 스터디에서 배운 도커를 사용하여 개발 환경을 셋팅해보기로 했다! 이 글은 도커에 대한 기본 개념은 알고 있다는 가정 하에 작성하였다. 내가 배포하기 위해 고려한 점들은 다음과 같다. 1. 프론트 개발자 입장에서 별도의 셋팅을.. 소프트웨어 공학 쇼핑몰 만들기 소프트웨어 공학 수업의 과제로 웹 쇼핑몰을 만드는 과제가 주어졌는데, 나의 경우 스프링부트와 JPA를 사용하여 백엔드단 서버를 만들고자 했다. 그런데, 단순히 뚝딱 만들어내는게 아니라 고려해야할 점이 생각보다 많았다.. 개선할 사항을 적어내려 가면서 코드가 어떻게 바뀌어 가는지, 왜 그렇게 바꾸었는지를 확인하고자 한다. 1. 테스트 - 학교 과제나 토이 프로젝트를 할 때는 테스트 코드를 따로 작성하지 않았는데, 최근 인프런을 보면서 공부하는 중에 테스트 코드를 자주 작성하여 검증하는걸 볼 수 있었다. 테스트의 장점은 인터넷에 찾아보면 널리고 널렸지만, 정작 꼼꼼하게 작성하는 사람들은 몇 없을 거라고 생각하여 크게 와닿지는 않았지만 스프링 환경에서 테스트를 지원하는 방식이 다양하고 케이스별로 자세하게 돌릴.. 쿠버네티스 이론 및 실습 쿠버네티스에는 셀 수도 없을 만큼 많은 리소스 종류와 컴포넌트가 존재하는데, 컨테이너 애플리케이션을 구동하기 위해 반드시 알아야 할 몇 가지 오브젝트가 존재한다. 쿠버네티스는 리소스 오브젝트들을 대부분 YAML 파일에 작성된 내용으로 관리한다. 1. 포드 (Pod) : 컨테이너를 다루는 기본 단위 1개 이상의 컨테이너로 구성된 컨테이너의 집합이다. 포드(pod) vs 컨테이너 기능들만 놓고 본다면, 포드는 docker run으로 생성한 컨테이너와 크게 다르지 않다. 컨테이너 ip 주소를 갖고 있어 쿠버네티스 클러스터 내부에서 접근할 수 있고, kubectl exec 명령어로 컨테이너 내부로 들어갈 수 있으며, kubectl logs 명령어로 포드의 로그를 확인할 수도 있다. 쿠버네티스가 포드를 사용하는 .. 이전 1 ··· 3 4 5 6 7 8 9 ··· 13 다음