본문 바로가기

분류 전체보기591

객체지향 객체지향 4가지 특징 1. 추상화 : 공통의 속성이나 기능을 추출하는 과정 2. 다형성 : 하나의 타입으로 여러 종류의 객체를 참조할 수 있는 것 3. 캡슐화 : 관련있는 데이터와 기능을 묶고, 외부에는 메서드로 기능만 제공한다. Tell, Don't ask 원칙. 객체에 원하는 기능을 요청해야한다. 값을 직접 가져와서 판단하면 안 된다. 캡슐화를 수행하여 외부에는 메서드로 기능만 제곰함으로써 객체가 어떤 data를 사용하여 어떻게 기능을 구현했는지는 감출 수 있다. (정보은닉 information hiding) 캡슐화를 수행함으로써 객체 내부에서만 로직 변경하면 되고, 해당 기능을 사용하는 외부에서의 변경사항은 적어진다. 4. 상속 : 부모 클래스의 필드나 메소드를 그대로 받아서 사용할 수 있게 된다... 2022. 9. 20.
동시성 이슈 동시성 이슈 해결하는 방법 문제해결 1. Application Level synchronized 사용 2. Database Database가 제공하는 lock을 사용 Pessimistic lock Optimistic lock ' named lock Redis Distribute lock 분산환경에서 레디스를 활용하여 동시성 제어 문제점 공유 자원에 여러 스레드가 동시에 접근하는 race condition 상태일 때 동시성 이슈 발생 함. @Test public void 동시에_100개의_요청() throws InterruptedException { int threadCount = 100; ExecutorService executorService = Executors.newFixedThreadPool(32.. 2022. 9. 13.
@Transactional 동작 원리 간략 설명 스프링에서는 @Transactional 어노테이션을 사용하면, 아래 이미지처럼 어노테이션이 붙은 클래스를 래핑한 클래스를 만들어서 실행하게 된다. (래핑한 클래스에는 해당 메서드 트랜잭션으로 처리하기 위한 로직이 들어가는 듯 하다.) @Transactional synchronized public void decrease(Long id, Long quantity){ Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(stock); } 2022. 9. 13.
Access denied for user 'root'@'localhost' (using password: YES) 에러 로그 : java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 해결 : 수 많은 블로그 글을 찾으며 해결 다양한 해결 시도를 하였지만 해결하지 못하였음. 제일 마지막 시도에 mysql:5.7 버전으로 실행하니 에러 없이 실행 됨. 뭔가 mysql 버전과 dependency와 관련된 문제이지 않을까 싶음 docker run -d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql:5.7 2022. 9. 13.