본문 바로가기

분류 전체보기50

Lotto - 1. Lotto 여름쯤해서 NextStep에서 하는 TDD, Clean Code with Java 12기에 참여했었다. 이 당시에는 자바를 이용해서 구현했는데 이번에 Kotlin으로 다시한번 구현해보았다. 이번 게시글에서는 기존에 구현했던 자바코드와 코틀린 코드가 어떻게 다른지 비교해보려 한다. 자바코드를 보고 코틀린 코드를 짠 것이 아니기 때문에 구현상 다른점이 존재합니다 Lotto 제일 처음부분인 Lotto 클래스이다. Lotto 클래스는 로또를 구매했을 때 하나의 번호 세트(6개의 번호)를 구현한 클래스이다. 이 Lotto 객체의 생성자는 직접 로또번호를 입력하는 경우, 자동으로 구매하는 경우 2가지가 있다. private static final List lottoRange = Stream.iterate(1, n .. 2021. 11. 7.
Spring에서 Http Request 보내기 - Feign Feign Feign은 Netflix에서 만든 Http Client Binder이다. Feign을 사용하면 평소에 Http 통신을 위해 사용했던 길고 긴 소스코드를 Spring Data Jpa를 사용하듯이 간편하게 사용할 수 있다. 환경 설정 plugins { id 'org.springframework.boot' version '2.5.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { ... imple.. 2021. 9. 19.
Github Action을 이용한 CI/CD 그동안 CI/CD구현을 위해 젠킨스를 사용했었는데 이번 프로젝트에서 EC2를 프리티어로 사용해서 젠킨스를 돌릴수가 없어서 Github Action을 사용해 보았다. 사용방법은 젠킨스에 비하면 훨씬 간단했다. GitHub Action 시작 먼저 Git 레포지토리의 Actions 탭에 들어가서 새로운 workflow를 만들어준다. 탭을 누르면 위와 같이 기본적으로 제공하는 여러 workflow가 있는데 나는 Java with Gradle을 선택하겠다. Set up this workflow 버튼을 클릭하면 yml 파일을 작성할 수 있는 화면으로 이동한다. 이처럼 workflow별로 기본적인 세팅은 모두 제공한다. 여기서 몇가지를 수정하여 Docker로 배포할 수 있는 환경세팅을 해줘야 한다. name: Jav.. 2021. 9. 14.
Docker를 이용한 Spring 프로젝트 배포 일반적으로 프로젝트를 실행할 대 jar파일로 실행하거나 ide가 재공하는 기능을 사용한다. 클라우드 환경에 배포를 할 경우 jar파일로 배포를 보통 해왔는데 이번에는 Dockerfile을 이용해서 배포를 해보았다. 예제는 개인 window 컴퓨터에서 진행했으며 클라우드(Linux) 환경에 배포할 때도 GUI에서 CLI환경으로 바뀌는 것 외에는 차이가 없으니 그냥 진행하겠다. Build 먼저 만들어진 프로젝트를 빌드를 해야한다. ./gradlew build build를 하게 되면 프로젝트의 build 폴더에 jar파일이 생성된다. Dockerfile 빌드가 완료됬으면 Dockerfile을 만들어줘야한다. 생성한 프로젝트의 Dockerfile을 생성해주자. 파일 이름은 정확히 Dockerfile 이여야 한다.. 2021. 9. 13.
자바 ORM 표준 JPA 프로그래밍 - 16장 트랜잭션과 락, 2차 캐시 트랜잭션과 락 트랜잭션과 격리 수준 트랜잭션은 원자성, 일관성, 지속성을 보장한다. 문제는 격리성인데 트랜잭션간에 격리성을 완전히 보장하려면 트랜잭션을 거의 차례대로 실행해야 한다. 이렇게 하면 동시성 처리 성능이 매우 나빠진다. 이런 문제로 인해 ANSI 표준은 트랜잭션의 격리 수준을 4단계로 나누어 정의했다. READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 순서대로 READ UNCOMMITED의 격리 수준이 가장 낮고 SERIALIZABLE의 격리 수준이 가장 높다. 격리 수준이 낮을수록 동시성은 증가하지만 격리 수준에 따른 다양한 문제가 발생한다. 격리 수준에 따른 문제점은 다음과 같다 DIRTY READ NON-REPEATABLE REA.. 2021. 9. 5.
자바 ORM 표준 JPA 프로그래밍 - 15장 고급 주제와 성능 최적화 예외 처리 JPA 표준 예외 처리 JPA 표준 예외들은 javax.persistence.PersistenceException의 자식 클래스다. 그리고 이예외 클래스는 RuntimeException의 자식이다. 따라서 JPA 예외는 모두 언체크 예외다. 트랜잭션 롤백을 표시하는 예외 : 트랜잭션 롤백을 표시하는 예외는 심각한 예외이므로 복구해선 안된다. 이 예외가 발생하면 트랜잭션을 강제로 커밋해도 트랜잭션이 커밋되지 않고 javax.persistence.RollbackException 예외가 발생한다. 트랜잭션 롤백을 표시하지 않는 예외 : 트랜잭션 롤백을 표시하지 않는 예외는 심각한 예외가 아니다. 따라서 개발자가 트랜잭션을 커밋할지 롤백할지 판단하면 된다. 트랜잭션 롤백 시 주의사항 트랜잭션을 롤백하.. 2021. 9. 4.