반응형

스터디 67

[토비의 스프링 3.1 Vol 1] 5장. 서비스 추상화 (5.2.3 ~)

5.2.3 트랜잭션 동기화 Connection 파라미터 제거 먼저 Connection을 파라미터로 직접 전달하는 문제를 해결한다. upgradeLevels() 메소드가 트랜잭션 경계설정을 해야 한다는 사실은 피할 수 없다. 따라서 그 안에서 Connection을 생성하고 트랜잭션 시작과 종료를 관리하게 된다. Connection 오브젝트를 계속 파라미터로 전달하다가 DAO를 호출할 때 사용하게 하는 대신 스프링이 제안하는 방법은 트랜잭션 동기화 transaction synchronization 방식이다. 트랜잭션 동기화란 UserService에서 트랜잭션을 시작하기 위해 만든 Connection 오브젝트를 특별한 저장소에 보관해두고, 이후에 호출되는 DAO의 메소드에서는 저장된 Connection을 가져..

[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 2장. 스프링 부트에서 테스트 코드를 작성하자

테스트 코드 소개 TDD는 단위 테스트(Unit Test)와 다른 개념이다. TDD는 테스트가 주도하는 개발을 의미한다.테스트 코드를 먼저 작성하는 것부터 시작한다. 항상 실패하는 테스트를 먼저 작성하고 (Red)테스트가 통과하는 프로덕션 코드를 작성하고 (Green) 테스트가 통과하면 프로덕션 코드를 리펙토링 한다 (Refactor)단위 테스트는 TDD의 첫번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 의미한다. TDD와 달리 테스트 코드를 꼭 먼저 작성해야 하는 것도 아니고, 리펙토링도 포함되지 ㅇ낳는다. 순수하게 테스트 코드만 작성하는 것을 의미한다.  테스트 코드 작성 도와주는 프레임워크 가장 대중적인 테스트 프레임워크로는 xUnit이 있다. JUnit - JavaDBUnit - DBCpp..

[토비의 스프링 3.1 Vol 1] 5장. 서비스 추상화 (~5.2.2)

5장. 서비스 추상화 DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 일관된 방법으로 사용할 수 있는지 살펴본다.  5.1 사용자 레벨 관리 기능 추가다수의 회원이 가입할 수 있는 인터넷 서비스외 사용자 관리 모듈에 적용한다고 가정 사용자 관리 기능에는 단지 정보를 넣고 검색하는 것 외에도 정기적으로 사용자의 활동내역을 참고해서 레벨 조정해주는 기능이 필요  구현해야 하는 비즈니스 로직 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나다.사용자가 처음 가입하면 BASIC 레벨이 되며, 이후 활동에 따라서 한 단계씩 업그레이드 될 수 있다. 가입 후 50회 이상 로그인 하면 BASIC에서 SILVER 레벨이 된다. SIVER 레벨이면서 30회..

[토비의 스프링 3.1 Vol 1] 4장. 예외 처리

4.1 사라진 SQLException JdbcTemplate 적용 이전에 있던 throws SQLException 선언이 적용 후에는 사라졌다.  4.1.1 초난감 예외처리예외 블랙홀 예외를 잡고는 아무것도 하지 않는다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 다음 라인으로 넘어간다.try { ...}catch (Exception e) {} 콘솔 로그를 누군가 계속 모니터링 하지 않는 한 심각한 문제로 남아있게 된다. } catch (SQLException e) { System.out.println(e);}} catch (SQLException e) { e.printStackTrace();} 무의미하고 무책임한 throws위의 케이스보다는 조금 낫긴 하지만 메소드 선언에서 의미 있는 정보를 얻을..

[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 1장. 인텔리제이 스프링 부트로 시작하기

1장 인텔리제이 스프링 부트로 시작하기  Maximum Heap Size 설정 도움말 > 메모리 설정 변경 이 설정은 인텔리제이를 실행하는데, 어느 만큼의 메모리를 할당할지를 결정하는 값이다.일반적으로 개발 PC의 메모리가 8G라면 1024 ~ 2048을, 16G라면 2048 ~ 4096을 선택해서 사용한다.  인텔리제이와 이클립스 인텔리제이에는 이클립스의 워크스페이스와 같은 개념이 없다. 프로젝트와 모듈의 개념만 있다. 인텔리제이를 실행할 때 모든 프로젝트를 한 번에 불러올 수 없다. 한 화면에서는 하나의 프로젝트만 열린다.   인텔리제이 커뮤니티에서 프로젝트 생성하기 1) 새 프로젝트 시스템 빌드 : GradleGradle DSL : Groovy   2) 고급 설정 하위 그룹ID와 아티팩트ID 연결 ..

[토비의 스프링 3.1 Vol 1] 3장. 템플릿

3장 템플릿 템플릿이란 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질로부터 독립시켜 효과적으로 활용할 수 있도록 하는 방법을 가지는 것 3.1 다시 보는 초난감 DAO  JDBC 수정 기능의 예외처리 일반적으로 서버에는 제한된 개수의 DB 커넥션을 만들어서 재사용 가능한 폴로 고나리한다. DB폴은 매번 getConnection()으로 가져간 커넥션을 명시적으로 close()해서 돌려주어야만 다시 폴에 넣었다가 다음 커넥션 요청이 있을때 재사용 할 수 있다.  오류가 날 때마다 반환되지 못하는 Connection이 계속 쌓인다. try/catch/finally 문으로 예외처리를 한다.   JDBC 조회 기능의 예외처리 Con..

[토비의 스프링 3.1 Vol 1] 2장. 테스트

2장. 테스트 2.1 UserDaoTest 다시 보기 public class UserDaoTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class); UserDao dao = context.getBean("userDao", UserDao.class); User user = new User(); user.setId("whiteship"); user.setName("백기선"); user.setPassword("married"); dao...

[토비의 스프링 3.1 Vol 1] 1장. 오브젝트와 의존관계

들어가며 : 스프링이란 무엇인가 ?자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크기본 틀 - 스프링 컨테이너스프링은 스프링 컨테이너 (또는 애플리케이션 컨텍스트) 라고 불리는 스프링 런타임 엔진을 제공스프링 컨테이너는 설정 정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리 스프링 컨테이너는 독립적으로 동작할 수도 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용 공통 프로그래밍 모델 - IoC/DI, 서비스 추상화, AOP1) IoC/DI : 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델으로 스프링 프레임워크에 동작하는 코드는 IoC/DI 방식을 따라서 작성돼야 스프링이 제공하는 가치를 제대로 누릴 수 있다.2) 서비스 추상화 : 스프링을 ..

[카프카인액션] 9장. 관리 : 도구와 로깅

9.1 관리 클라이언트9.1.1 AdminClient를 사용한 코드 관리 카프카 쉘 스크립트 통해 빠른 접근이나 일회성 작업이 좋지만, 자바 AdminClient 통해 자동화를 제공할 수 있다 9.1.2 kcat 전체 Kafka 도구를 설치할 필요 없이 가볍게 사용 가능 9.1.3 컨플루언트 REST 프록시 API 경우에 따라 선호도나 사용 편의성으로 인해 REST API 방식을 선호할 수 있다. 또한 포트에 엄격한 방화벽 규칙 가진 회사의 경우 더 많은 포트를 열때 주의가 필요할 수 있다.이 때 한 가지 좋은 선택지는 REST 프록시 API를 사용하는 것이다. 9.2 카프카를 systemd 서비스로 실행하기 systemd는 시스템 전반에 걸쳐 구성 요소를 초기화하고 유지 관리하는 역할을 담당한다.주키퍼..

[카프카인액션] 8장. 카프카 스토리지 | 아파치 볼륨 | 레드햇 데베지움 | 람다 아키텍처 | 카파 아키텍처

8장. 카프카 스토리지8.1 데이터 저장기간 현재 카프카 토픽 데이터의 기본 보존기간 제한은 7일이다. 로그 보존기간 제한을 비활성화하고 영원히 유지하려면 log.retention.bytes와 log.retention.ms를 모두 -1로 설정하면 데이터 삭제를 끌 수 있다. 키목적log.retention.bytes로그 삭제를 위한 최대 크기 임곗값(바이트 단위)log.retention.ms로그 삭제 전 유지 시간 (밀리초 단위)log.retention.minutes로그 삭제 전 유지 시간(분 단위). log.retention.ms가 함께 설정되어 있따면 log.retention.ms가 사용된다.log.retention.hours로그 삭제 전 유지 시간(시간 단위)가 log.retention.ms와 log..

반응형