JAVA

메서드나 생성자를 작성할 때면 매개변수에 어떤 제약이 있을지 생각해야 한다. 그 제약들을 문서화하고, 메서드 코드 시작부에서 명시적으로 검사해야 한다. 그렇게 매개변수 오류를 걸러내도록 해야 한다. ■ 매개변수가 유효한지 확인하라 API 사용자가 제약을 지킬 가능성을 크게 높일 수 있다. 다음은 전형적인 예다. /** * (현재 값 mod n) 값을 반환한다. 이 메세드는 * 항상 음이 아닌 BigInteger를 반환한다는 점에서 remainder 메서드와 다르다. * * @param m 계수 (양수여야 한다.) * @return 현재 값 mod m * @throws ArithmeticException m이 0보다 작거나 같으면 발생한다. */ public BigInteger mod(BigInteger ..
스프링 캐싱 Intro 웹애플리케이션의 대표적 성능 문제는 RDB에서 대량의 데이터를 자주 가져오는 상황이라고 한다. 그런 상황을 최대한 줄이려고 노력해보자! 잘 변경되지 않는 데이터라면 캐싱해두면 되겠다. 스프링 3.1 이상부터는 데이터 캐시 기능을 제공한다. 즉 캐시의 추상화를 제공한다. 스프링은 Cache & CacheManager 인터페이스를 제공하고 있다. 개발자가 실제 사용할 Cache Provider를 적용할 수 있도록 Service Provider Interface (SPI)를 제공하는 개념이다. 스프링 4.1부터는 어노테이션도 제공한다. (들어가며..) 캐싱 개념은 운영체제 공부할 때 배우기만 했고 이렇게 스프링에서 사용할 수 있다는 생각은 해보지도 않았다. 오늘 일과가 끝나고 지하철에서..
1. 비즈니스 로직 층과 트랜잭션 비즈니스로직과 트랜잭션 처리는 뗄 수 없는 사이다. 그래서 자연스럽게 트랜잭션은 비즈니스로직층에서 처리한다. 그래서 이 글의 목적은, 트랜잭션 처리를 지원하는 스프링 기능을 살펴보기 위함이다. 1.1. 트랜잭션을 처리하는 경계 스프링은 메서드 호출에 대응해서 트랜잭션을 처리한다. 다시말해 트랜잭션은 하나의 요청을 받아내는 비즈니스 메서드 단위로 이루어진다. 그런 메서드는 비즈니스로직층에 구현된다. 그래서 프레젠테이션층과 비즈니스로직층 사이가 트랜잭션의 경계다. 다시 말해서, 컨트롤러가 호출하는 어떤 서비스층의 메서드의 시작이 트랜잭션 시작이다. 그 메서드를 마치고 컨트롤러로 돌아가는 시점이 트랜잭션의 종료다. 그러나 이렇게 경계에서 트랜잭션을 시작하고 종료할 때, 직접 ..
1. 데이터 액세스에 대한 이해 데이터 액세스를 돕는 여러가지 기술이 있다. 자바의 근본 데이터 액세스 기술인 JDBC, 역시 지존인 하이버네이트와 JPA, MyBatis 등의 기술말이다. 먼저 지금은 이러한 기술에 집중하지않고 데이터 액세스 자체에 대한 공통적인 이야기를 하려고 한다. 1.1. 데이터 액세스 층의 필요성 비즈니스로직에 빈번한 데이터액세스처리가 섞여있다면 상상만해도 가독성이 최악이다. 비즈니스 로직을 위한 소스코드에서 핵심 로직을 구분하기 힘들 것이 분명하다. 그래서 데이터 액세스를 담당하는 클래스를 따로 둔다. Data Access Object 약어로 DAO라고 한다. 계좌이체 서비스의 transfer() 기능을 생각해보자. transfer()기능 수행 중 Account 데이터에 접근해..
오류 'dependencies.dependency.version' for org.thymeleaf.extras:thymeleaf-extras-springsecurity5:jar is missing. 또는 Unresolved dependency: 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:jar:unknown' 또는 org.thymeleaf.extras:thymeleaf-extras-springsecurity5:jar:unknown was not found in https://repo.maven.apache.org/maven2 during a previous attempt. This failure was cached in the local reposi..
🪄 Intro 이 포스팅은 단일 트랜잭션 실습 중 생긴 의문점을 해결한다. 영속성 컨텍스트의 '1차캐시' 개념을 알게 되었다. 🚨 상황 - Spring JPA를 통한 @Transactional 테스트코드 실습중! ↓ 내 테스트코드 Entity의 속성값 "YEEUN KIM"을 "SIKYONG SUNG"으로 변경하는 코드 @Test @Transactional // 영속성 컨텍스트 안에서 관리한다. void UPDATE_TEST() { // Given : 엔티티를 영속성 컨텍스트에 저장 CustomerEntity customer = new CustomerEntity(); customer.setId(1L); customer.setFirstName("YEEUN"); customer.setLastName("KIM"..
학습 키워드 : 자바코드와 쿼리의 분리 &쿼리매퍼인 Mybatis Mybatis를 왜 이용할까? JdbcTemplate 사용시 query가 자바코드에 하드코딩되는 문제가 있다. 이때 쿼리매퍼인 Mybatis를 사용하면, 자바 코드와 쿼리를 분리해준다. 쿼리수정을 위하여 자바코드를 건드는 짓을 하지 않아도 된다는 것이다! Springboot에서 Mybatis를 이용하는 두가지 방법 ■ Annotation을 이용하는 방법 @Insert, @Update @Select annotation의 파라미터로 query를 넣어준다. ■ Xml을 이용하는 방법 xml파일에 query를 작성해주고, 어떤 Mapper와 매핑되는지 명시해준다. 여기서는 xml파일을 이용하는 방법을 기록한다. 먼저 과정을 요약하자면 이렇다. (..
지금까지 개발하면서 아무 생각 없이 Controller를 사용해 왔다. Controller의 동작 원리를 모른 채로! 그래서 지금부터 Spring의 Controller는 어떤 방식으로 동작하는지, 그러니까 클라이언트의 요청을 Controller가 어떤 과정으로 처리하게 되는 건지를 정리하고 넘어간다. 1. Controller가 어떤 과정으로 클라이언트 요청을 받는지 2. Controller가 어떤 과정으로 응답을 내놓는지 (=> 즉 Spring MVC의 동작구조를 살펴보자는 것임) Spring MVC 다들 알 것이다. Model, View, Controller! 클라이언트 요청 관련 역할분담을 M, V, C로 한 것이다. 명확한 역할을 나누어 개발하기 때문에 웹개발을 쉬워지게 한다. 1. Controll..
AOP aspect-oriented programming concern을 분리하여 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. wiki에 보면 "횡단 관심사(cross-cutting concern)의 분리를 허용"한다고 되어있다. 부가적인 기능(관심사)을 따로 모듈화하므로 OOP를 더욱 강화하는 방식이라고 볼 수 있다. "흩어진 관심사를 Aspect로 모듈화한다"고 기억해두면 스프링 AOP를 이해하기 편하다! ∨ 프로그래밍 패러다임? 프로그래밍을 어떤 관점으로 바라보고 인식할 것이냐(=패러다임)를 말한다. 프로그래밍 패러다임은 크게 명령형/선언형으로 분류한다. 그중 OOP는 명령형 프로그래밍 패러다임에 속한다. OOP를 더욱 OOP스럽게 만드는 것이 AOP이다. + 프로그래밍 패러다임? 더보..
post 요청 결과를 json으로 받아오지 못했다. 원인 : Response Dto 클래스에 Getter를 작성하지 않았다. json response를 위해서는 Dto에 Getter가 필요함을 새로 알았다. @Getter를 붙여서 바로 해결되었다. 관련 글 : https://velog.io/@rmswjdtn/Spring-Response-Request-DTO-%EA%BD%89%EC%9E%A1%EA%B8%B0 [Spring] Jackson : Response, Request DTO 꽉잡기 최근 프로젝트를 하면서 당연하게 사용하던 DTO 매핑이 어떻게 일어나는지 궁금해졌고, DTO에 붙여주는 여러가지 롬북 어노테이션들.. 이중에 정말 필요한 것만 내가 쓰고있는가?라는 의문이 생 velog.io 위 링크에서 배..
히어로맛쿠키
'JAVA' 카테고리의 글 목록 (4 Page)