728x90

개발/Java & Kotlin 134

[Kotlin] 코틀린 기초 살펴보기

코틀린 기초 나는 Java + Spring boot를 주로 사용하는 개발자 이지만, Kotlin은 같은 JVM 환경에서 돌아가고, Java를 공부한 사람이 접근하기 쉽다고 하여 한번 겉핥기 식으로 공부해보려한다. 기본적 특징 기존 자바 언어와 완벽한 호환성을 제공 안전성: NPE 방지, Immutable 자료구조 제공 간결성: 코드는 작성되는 시간보다 읽히는 데 훨씬 많은 시간이 소모(간결한 코드는 가독성과 유지보수성을 향상시킴) 코루틴 라이브러리를 통한 비동기 프로그래밍 OOP와 FP 구조를 함께 사용할 수 있음 코틀린 기본 문법 // java int a = 10; // Kotlin val a: Int = 10 var a = 15 - 변수 선언 방식이 Go나 TS와 비슷하다. - Go 처럼 ";"를 생..

[Spring] 스프링 부트에 캐시 적용하기

스프링 부트에 캐시 적용하기 캐시(Cache) - 자주 사용하는 데이터를 미리 보관해둔 임시 장소 - 비교적 저장 공간이 적고, 전체적인 비용이 비쌈 - 빠른 IO를 통해 성능적 이점을 갖는다. - 도중에 변경될 일이 없는 DB 조회 값이나 자주 호출되는 데이터에 사용 스프링 부트에서의 캐시 - 스프링 부트에서 사용할 수 있는 캐시는 대부분 JSR-107를 따른다.(JSR: Java Specification Requests, 자바 플랫폼에 대한 규격을 제안하거나 기술한 것을 의미, JSR-107은 JCACHE에 대한 내용) - JSR-107을 따르는 캐시를 사용하면 어떤 구현체 캐시를 사용하는지에 관계없이 추상화를 지원 로컬 캐시와 글로벌 캐시 로컬 캐시 - 로컬에서만 사용하는 캐시 - 외부 서버와 트랜..

[Spring] 테스트 커버리지 확인하기

테스트 커버리지 확인하기 코드 커버리지 - 소프트웨어의 테스트 수준이 충분한지 표현할 수 있는 지표 중 하나 - 테스트를 진행했을 때 해당 코드가 실행되었는지를 표현하는 방법 - 많은 코드 커버리지 도구가 있다. Jacoco란? - Java 코드의 커버리지를 체크하는 라이브러리 - 작성된 코드의 테스트 커버리지(Test Coverage)를 측정하는 도구 - Runtime으로 Test Case를 실행하여 Coverage를 체크하는 방식 - 테스트 코드를 통해 테스트를 실행하고 그 결과를 html, xml, csv 등의 형식으로 Report를 제공 블랙 박스 테스트 / 화이트 박스 테스트 블랙 박스 테스트 - 소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방식 - 다양한 값을 입력하여..

[Spring] 테스트 코드 적용하기

테스트 코드 적용하기 TDD에 대한 간단한 정리 - 테스트 주도 개발이라는 의미 - 테스트를 먼저 설계 및 구축 후 테스트를 통과할 수 있는 코드를 작성 - 코드 작성 후 테스트를 진행하는 방법 - 애자일 개발 방식 중 하나 코드 설계 시 원하는 단계적 목표에 대해 설정하여 진행하고자 하는 것에 대한 결정 방향의 갭을 줄이고자 함 최초 목표에 맞춘 테스트를 구축하여 그에 맞게 코드를 설계하기 때문에 보다 적은 의견 충돌을 기대할 수 있음(방향 일치로 인한 피드백과 진행 방향의 충돌 방지) 테스트 코드 작성 목적 - 코드의 안정성을 높일 수 있음 - 기능을 추가하거나 변경하는 과정에서 발생할 수 있는 Side-Effect를 줄일 수 있음 - 해당 코드가 작성된 목적을 명확하게 표현할 수 있음(코드에 불필요..

[Spring] 스프링 부트에서의 예외 처리

스프링 부트의 예외 처리 방식 - 스프링 부트의 예외 처리 방식은 크게 2가지 1. @ControllerAdvice를 통한 모든 Controller에서 발생할 수 있는 예외 처리 모든 컨트롤러에서 발생할 예외를 정의 2. @ExceptionHandler를 통한 특정 Controller의 예외 처리 발생하는 예외 마다 처리할 메소드를 정의 @ControllerAdvice, @RestControllerAdvice - @ControllerAdvice는 Spring에서 제공하는 어노테이션 - @ControllerAdvice나 @RestController에서 발생하는 예외를 한 곳에서 관리하고 처리할 수 있게 하는 어노테이션 - 설정을 통해 범위 지정이 가능하며, Default 값으로 모든 Controller에 ..

[Spring] 알아두면 좋은 디자인 패턴

알아두면 좋은 디자인 패턴 디자인 패턴이란? - 디자인 패턴이란 특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책. - 목적별로 일정한 패턴이 제시되어 있다. - 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용. 디자인 패턴의 장점 - 개발자 간의 원활한 협업이 가능 - 소프트웨어의 구조를 파악하기 용이 - 재사용을 통해 개발 시간 단축 - 설계 변경이 있을 경우 비교적 원활하게 조치 가능 디자인 패턴의 단점 - 객체지향적 설계를 고려하여 진행해야 함 - 초기 투자 비용이 많이 들어감(돈, 시간 등) GoF 디자인 패턴 목적에 따른 분류 - 생성 패턴, 구조 패턴, 행동 패턴, 3가지로 구분된다. - 각 패턴이 어떤 작업을 위해 생성되는 것인지에 따른 구분. 1. 생성 패턴 - ..

[Spring] RestTemplate 사용하기

RestTemplate은 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트이다. 용도는 서버에서 다른 서버의 API를 호출할 때 사용된다. 주요 사용되는 메소드의 기능이다. 외울 필요는 없고, 그때 그때 찾아보는게 효율적일듯 메소드 기능 delete() 지정된 URL의 리소스에 http delete 요청 수행 exchange() 지정된 http 메소드를 url에 대해 실행. response body와 연결되는 객체를 포함하는 responseEntity를 리턴 execute() 지정된 http메소드를 url에 대해 실행. response body와 연결되는 객체를 리턴 getForEntity() http get request 전송. response body와 연결되는 객체를 포함하는 re..

[JPA] fetchCount() 대체하기

회사에서 C#을 자바로 전환하는 작업을 하고있다. 약 16만 건의 데이터를 조회하고 페이징 하는 작업 중 화면까지 로딩 되는 시간이 오래 걸렸다.(3초 정도) 데이터가 그렇게 큰 것 같진 않은데 오래걸려서 속도를 단축시켜봤다. 테이블 구조는 예전에 만들어져 있던 것이라 수정할 수 없었고, 같은 테이블이 4번씩 조인되어 있었는데, 이러한 부분을 없애고, 자바쪽에서 데이터를 가공했다. 그 결과 1.3 ~ 1.5초로 단축했는데, 만족스럽지 않았다. 비슷한 경험을 한 회사 동료가 페이징 때문에 total을 계산 하는 쪽이 문제가 될 수도 있다고 해서, 그 부분을 없애니 속도가 0.1초대로 빨라졌다. JPAQuery jpaQuery = query .select( Projections.constructor(DTO...

[Spring] 동시성 이슈 해결 방법 (4)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/110 [Spring] 동시성 이슈 해결 방법 (3) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/109 [Spring] 동시성 이슈 해결 방법 (2) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방.. devhooney.tistory.com 메모리 DB인 Redis를 활용하여 데이터 정합성을 맞추는 방법을 알아보자 Lettuce Redisson 2가지가 있다. Lettuce - Lettuce는 setnx 명령어를 활용하여 분산락을 구현한다. 키와 밸류를 set할 때 기존 값이 없을 때만 se..

[Spring] 동시성 이슈 해결 방법 (3)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/109 [Spring] 동시성 이슈 해결 방법 (2) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방법 (1) 간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedVal.. devhooney.tistory.com DB를 활용하여 데이터 정합성을 맞추는 여러가지 방법을 알아보려한다. Mysql(mariaDB)를 활용한 방법은 3가지가 있다. Pessimistic Lock (exclusive lock) Optimistic Lock Named Lock - Pes..

728x90