본문 바로가기

전체보기

(113)
자바 트러블슈팅 - (1. 자바 기반의 시스템에서 발생할 수 있는 문제들) https://www.yes24.com/Product/Goods/84937877 자바 트러블슈팅 - YES24 건강한 서비스를 위한 scouter 활용법은 물론,그 밖의 시스템 장애 극복을 위한 다양한 도구 사용법을 배운다!기술이 아무리 발전하고 뛰어난 개발자가 있더라도 사람이 만든 프로그램은 언제든 www.yes24.com 자바 기반의 시스템에서 발생할 수 있는 문제들 서비스나 시스템 장애가 발생하면 대부분은 서버의 로그를 보거나 서버의 리소스 사용량을 보고 짐작 경험이 풍부 -> 데이터를 기반으로 문제의 원인을 쉽게 찾아냄 경험이 없음 -> 중요 데이터를 수집하지 않고 서버를 재시작 하는 경우가 있음 어떤 문제가 발생할 수 있을까? 시스템이 느려짐 시스템 응답이 없음 예외 발생 시스템 죽음 시스템이 ..
헥사고날 아키텍처 정리 및 예제 일반적인 계층화 아키텍처의 문제점 저 같은 경우 예전에는 습관적으로 Controller, Service, Repository를 작성하고, 이것을 표현(프레젠테이션) 계층, 비즈니스 로직 계층, 영속화(퍼시스턴스) 계층이라고 생각하고 사용했습니다. 하지만 일반적인 계층화 아키텍처에는 몇 가지 중요한 이슈가 있다고 생각합니다. 표현 계층은 하나뿐인가? 사실 애플리케이션을 호출하는 시스템은 다양할 수 있습니다. 자주 사용되는 HTTP 호출이 있을 수 있고, 또는 웹소켓을 통한 호출 및 기타 다양한 프로토콜이 될 수 있습니다. 영속화 계층이 하나뿐인가? 표현 계층에 대한 문제와 유사합니다. 사용하는 DB가 MySQL, Oracle과 같은 RDBMS일수도 있고, 빠른 검색 및 샤딩을 위한 NoSQL이 될 수 있..
겨울 느낌
[JPA] failed to lazily initialize a collection 0. 에러 상황 TestCode 작성 중 단순 save - find 코드를 작성했는데 아래와 같은 에러가 발생 failed to lazily initialize a collection of role: com.demo.jpastudy.entity.UserEntity.addressList, could not initialize proxy - no Session org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.demo.jpastudy.entity.UserEntity.addressList, could not initialize proxy - no Session at app//org.hib..
[JPA] Null value was assigned to a property exception 1. 에러 원인 JPA를 사용해 개발을 하다 보면 database column은 nullabel 속성이지만 entity의 field는 primitive 타입으로 설정할 때가 있다. 그럴 때 primitive type에는 null 값을 할당할 수 없어 해당 에러가 발생한다. 2. example Entity 설정 code // TestEntity.java @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Entity public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int testPriority; } // TestRep..
JPA 낙관적 잠금 (Optimistic locking)을 알아보자 0. 목차 * 이 글은 MySQL을 기본으로 예제 및 시나리오를 작성합니다. 목차 1. 낙관적 잠금이란? 1.1 MySQL 엔진 level과 스토리지 엔진 level MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눠볼 수 있다. MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치게 되지만 스토리지 엔진 레벨의 잠금은 스토리지 엔진 간 상호 영향을 미치지는 않는다. 낙관적 잠금은 InnoDB 스토리지 엔진 잠금의 한 종류이다. 1.2 비관적 잠금과 낙관적 잠금 1.2.1 비관적 잠금 현재 트랜잭션에서 변경하고자 하는 레코드에 대해 잠금을 획득하고 변경 작업을 처리하는 방식 '변경하고자 하는 레코드를 다른 트랜잭션에서도 변경할 수 있다'라는 비관적인 가정을 하..
Jackson 라이브러리 Annotation 총정리 출처 : https://www.baeldung.com/jackson-annotations Jackson Annotation Examples | Baeldung The core of Jackson is basically a set of annotations - make sure you understand these well. www.baeldung.com 예제 코드 : https://github.com/vljh246v/TIL/blob/main/Kotlin/study/src/test/kotlin/com/jaehyun/kotlin/study/jackson/custom/TestClassTest.kt GitHub - vljh246v/TIL: Today I learned Today I learned. Contrib..
[JUnit] 파일 & 리소스 (/src/test/resources) 가져오기 * JUnit5 사용 1. 시나리오 * 테스트 중 파일을 읽거나 테스트 중인 정보를 파일에 써야 할 때가 있음 * 디렉토리의 파일을 읽는 방법이 필요함 2. File I/O 사용 * 가장 간단한 방법은 java.io.File 클래스의 인스턴스의 getAbsolutePath() 메소드를 호출하여 선택한 디렉터리를 읽는 방법 @Test fun useFileIo() { val path: String = "src/test/resources" val file: File = File(path) val absolutePath = file.absolutePath println(absolutePath) assertTrue(absolutePath.endsWith(path)) } * 출력 결과는 아레와 같다. /Users/..
[JUnit] Dynamic Tests * JUnit5 사용 1. Dynamic Test란? * @Test 주석이 달린 표준 테스트는 컴파일 시간에 정의되는 static 한 테스트이다. * Dynamic Test는 런타임 중에 생성되는 테스트 * @TestFactory 주석이 달린 팩토리 메소드에 의해 생성 * 팩토리 메소드는 DynamicTest 인스턴스의 Stream, Collection, Iterator를 반환해야 함 * @BeforeEach / @AfterEach 와 같은 생명주기 관련 어노테이션을 지원하지 않음 2. Dynamic Test 예제 * @TestFactory method는 dynamic test라는 것을 명시해준다. * dynamic test는 컬렉션을 반환함 * 이름, 실행 두 부분으로 나뉨 @TestFactory fu..
[JUnit] 객체 타입 체크 * JUnit5 사용 * 반환된 객체의 타입을 체크해야할 경우가 있다. 1. 시나리오 * 나뭇잎 타입에따라 나무를 분류한다. * 올바른 유형을 반환하는지 검사할 필요가 있다. class TestClass { fun sortTree(name: String): Tree { val deciduous = listOf("Beech", "Birch", "Ash", "Whitebeam", "Hornbeam", "Hazel & Willow") val evergreen = listOf("Cedar", "Holly", "Laurel", "Olive", "Pine") return if(deciduous.contains(name)) { Deciduous(name) } else if(evergreen.contains(name)..