본문 바로가기

Spring27

[Spring] bean scope prototype TroubleShooting (feat, connection) 빈 생명주기에 관해서 그래도 기본은 알고있다고 생각했는데 큰 오산이었다. 운영에 반영을 했는데 몇 일 뒤 최대 Connection을 초과해서 장애가 발생하였다. 원인은 Connection close가 되지 않아서였다. AS-IS TO-BE 왜?? 소스를 어떻게 짰길래?? 샘플 소스로 확인해보자. AServiceImpl는 매번 새로운 커넥션을 맺고 사용이 끝나면 자원을 close 하는 역할을 하고 있다. common.xml에 Impl 클래스를 prototype으로 빈을 등록해놓았다. 그리고 다른 클래스에서 매번 새로운 인스턴스로 사용하기 위해서 beanFactory에서 getBean을 통해 직접 해당 클래스를 가져왔다. @Autowired private AutowireCapableBeanFactory be.. 2021. 1. 19.
자바 싱글톤 VS 스프링 싱글톤 자바의 싱글톤 생성자를 private로 선언 = 외부에서 클래스의 인스턴스 생성 불가 static 선언 = 어느 영역에서든 접근 가능 classloader에 의해 어플리케이션 runtime시 단 한번만 인스턴스화 한다. Thread Safety를 보장하는 싱글톤 구현 public class Singleton{ private static Singleton instance; // 생성자 private Singleton(){} // thread safety getter public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } } 자바 싱글톤은 get.. 2020. 10. 22.
[Spring] SpringBoot + Gradle(5.x && 6.x) + Querydsl Setting SpringBoot + queryDsl Setting 총정리 스프링 버전 : 2.2.6 그래들 버전 : 6.4.1 QueryDsl 의존성을 추가해주고 프로젝트를 빌드했지만, 아래와 같은 에러가 빈번했다. 큐 클래스가 생성이 안됨 cannot find symbol q class 2.큐 클래스가 생성은 됐지만, 중복됨 duplicate class 장장 5일정도는 셋팅만하느라 시간을 허비한 것 같다. 처음 queryDsl 설정은 이동욱님의 블로그를 보고 참고해서 작성했었다. 첫 셋팅은 대략 아래와 같았다. 구글링을해봐도 거기서 거기인듯하다. buildscript { ext{ springBootVersion = '2.2.4.RELEASE' querydslPluginVersion = '1.0.10' } repos.. 2020. 9. 6.
[Spring] SpringBoot + Gradle + NPM Build 셋팅하기 프론트엔드 라이브러리의 경우 url을 사용해서 참조하는 경우가 많은데, 해당 서버에 장애가 발생하거나 url이 변경되는 경우에 나의 프로젝트에까지 영향을 미치게된다. 그래서 이번시간에는 해당 라이브러리들을 npm install로 다운 받아 gradle 내에서 같이 build 되도록 하는 방법을 공유하려한다. 버전 OS : Mac 스프링 : 2.2.4 RELEASE 그래들 : 6.4.1 프론트엔드 라이브러리 설정 NPM 선호 고려해야하는 사항 빌드, 버전관리, 시큐리티 설정 프로젝트 resources/static 경로로가서 npm init 엔터를 입력하다보면 init이되고 package.json이 생성된다 npm install bootstrap //bootstrap 설치해주고 설치를했으면 css를 boot.. 2020. 8. 12.
[Spring] Restful Api example (with Hateoas) 구현 환경 https://spring.io/guides/gs/rest-hateoas/ 의 기본 예제를 다운 받아 사용하였다. Spring Boot (2.2.2 RELEASE) H2 JPA 소스코드 Member @Entity @Table(name = "member") @NoArgsConstructor @AllArgsConstructor @Getter @Setter @Builder @EqualsAndHashCode(of = "id") public class Member { @Id @GeneratedValue private Long id; private String name; private Integer age; @Enumerated(EnumType.STRING) private Grade grade; private.. 2020. 7. 29.
[Spring] @Transactional - 2 isolation (격리수준) 이전 글에서 트랜잭션 전파레벨에 대해서 알아보았다. 트랜잭션을 사용할 때, 전파레벨과 함께 따라오는 것이 격리수준이다. 트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준을 말한다. 격리수준에는 4가지가 있다. READ_UNCOMMITED (level 0) READ_COMMITED (level 1) REPEATABLE_READ (level 2) SERIALIZABLE (level 3) 격리 수준이 높아질수록 동시성(Concurrency)은 높아지고 속도는 느려진다. 이 둘의 균형을 잘 맞추는것이 중요하다. READ_UNCOMMITED (커밋되지 않는 읽기, level 0) 트랜잭션 처리중 or 아직 commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 어떤 사용자가 A라는 데이터를 B로 변.. 2020. 7. 9.