JAVA/SPRING
-
[JPA] Optimistic, Pessimistic LockJAVA/SPRING 2024. 8. 10. 16:06
낙관적 락(Optimistic Lock)낙관적 락은 사전에 테이블 로우에 락을 거는 방식이 아닌 충돌이 발생했을 경우에 대비하는 방식입니다.테이블에 특정 컬럼을 추가하여 조회 시점의 값과 저장하려는 시점의 값이 동일한지 확인하여 충돌을 방지하도록 동작합니다.이는 충돌 발생 빈도수가 낮은 상황에 적합하며 지속적인 락으로 인한 성능 저하를 막을 수 있습니다.아래는 Spring boot, JPA에서 낙관적 락을 적용하는 예시입니다.Entity@Entityclass UserEntity( id: Long, name: String, version: Int,) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long..
-
[Spring] IoC(Inversion of Control)JAVA/SPRING 2023. 9. 3. 21:46
IoC(Inversion of Control)은 메소드, 객체의 호출 작업을 개발자가 결정하는 것이 아닌 외부에 의해서 결정되는 것을 의미합니다. 스프링의 경우 스프링 컨테이너에 Bean을 등록하면 스프링 컨테이너에서 Bean의 라이프 사이클(생성, 의존성 주입, 초기화, 소멸)을 관리해주고 있습니다. IoC의 장점 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드 작성이 가능 IoC 컨테이너가 객체를 관리해주므로 개발 과정에서 객체 관리에 대한 리소스 감소
-
[Spring] AOP (Aspect Oriented Programming)JAVA/SPRING 2023. 6. 11. 15:43
1. AOP 란? 자바에서는 다중 상속이 불가능하여 상속을 통한 공통 메소드를 구성에 한계가 있지만 AOP를 통해 핵심 관심 사항(Core Concern)과 공통 관심 사항(Cross-Cutting Concern)을 분리하고 모듈화 할 수 있습니다. (ex. 주문 API: 핵심 관심사(주문 로직), 공통 관심사(로깅)) AOP의 장점 공통 관심사를 핵심 관심사로부터 분리하여 핵심 로직의 변경없이 공통 관심사를 변경 가능 공통 로직을 적용할 대상을 선택 가능 주요 개념 Aspect: 공통적인 관심사를 모듈화 Target: Aspect가 적용될 대상(메소드, 클래스...) Join point: Aspect가 적용될 수 있는 시점 Advice: Aspect의 기능 Point cut: Advice를 적용할 메소..
-
[Spring] 의존성 주입 (Dependency Injection)JAVA/SPRING 2023. 5. 29. 15:44
1. 의존성 주입이란? 객체를 직접 생성하는 것이 아니라 외부에서 생성된 객체를 주입하는 방법으로 런타임에 의존성을 동적으로 주입하여 결합도를 낮출 수 있습니다. 스프링에서 의존성을 주입할 수 있는 방법으로는 생성자 주입, 필드 주입, 수정자 주입 등의 방법이 존재하고 스프링에서는 생성자 주입을 권장하고 있습니다. 의존성 주입을 통해 클래스들의 결합도를 낮출 수 있고 객체의 유연성을 높이고 테스트 작성이 용이해진다는 장점이 있습니다. public class Person { private Student student; public Person() { this.student = new Student(); } } 위 코드 예시의 문제점은 Person 클래스와 Student클래스가 강한 결합도를 가지고 있습니..
-
[Spring] org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found inJAVA/SPRING 2020. 4. 15. 21:05
에러 코드 : org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.xxx.xxx 원인 : MyBatis가 자동적으로 객체를 생성할 때 기본적으로 파라미터가 없는 생성자가 존재해야함 해결방법 : Vo에 파라미터가 없는 생성자 생성
-
[SPRING] SPRING 게시판 (8) - CRUD [게시글 수정]JAVA/SPRING 2020. 3. 18. 15:42
Mapper 작성 ... UPDATE board SET title=#{title}, content=#{content}, editTime=now() WHERE bno=#{bno} Dao 작성 // Dao/BoardDao.java ... //추가 public void updatePosts(BoardVo posts) throws Exception{ sqlSession.update(Namespace + ".update", posts); } 테스트케이스 작성 // test/boardDaoTest.java ... //추가 @Test public void testUpdatePosts() throws Exception{ BoardVo posts = new BoardVo(); posts.setBno(1); posts.s..
-
[SPRING] SRPING 게시판 (7) - CRUD [게시글 삭제]JAVA/SPRING 2020. 3. 16. 16:43
Mapper 작성 // mapper/BoardMapper.xml ... DELETE FROM board WHERE bno = #{bno} Dao 작성 // Dao/BoardDao.java ... //추가 public void deletePosts(int bno) throws Exception{ sqlSession.delete(Namespace + ".delete", bno); } 테스트 케이스 작성 // test/boardDaoTest.java ... //추가 @Test public void testDeletePosts() throws Exception{ int bno = 3; boardDao.deletePosts(bno); } Service 작성 //Service/BoardService.java .....
-
[SPRING] SPRING 게시판 (6) - CRUD [게시물 상세보기]JAVA/SPRING 2020. 3. 16. 16:15
Mapper 작성 // mappers/BoardMapper.xml ... SELECT * FROM board WHERE bno = #{bno} Dao 작성 // Dao/BoardDao.java ... //추가 public BoardVo detailPosts(int bno) throws Exception{ return sqlSession.selectOne(Namespace + ".detail", bno); } 테스트 케이스 작성 // test/boardDaoTest.java ... //추가 @Test public void testDetailPosts() throws Exception{ int bno = 2; BoardVo post = boardDao.detailPosts(bno); logger.info(p..