분류 전체보기

· 기타
이번 주제도 cs 공부를 하다가 나온 주제다. 일반적으로 한 트랜잭션에 하나의 영속성 컨텍스트가 할당된다. 즉 A라는 트랜잭션 서비스에서 user를 찾으면 user를 영속성 컨텍스트에 저장. 그런데 여기서 나온 궁금증이 "만약 A서비스에서 B트랜잭션 서비스를 호출하고 user를 조회하면, A의 영속성 컨텍스트를 이용하나?" 이게 물음이었다. 테스트를 위해 간단한 서비스를 만들었다. @Override @Transactional public void findUser(Long id) { // 첫번째 트랜잭션에서 유저 조회 log.info("서비스1"); User user = userRepository.findById(id).get(); emailService.findUserUser(id); } ㅡㅡㅡㅡㅡㅡㅡㅡ..
· 기타
CS 준비를 하면서 팀원들이랑 얘기하는데 나왔던 주제였다. 보통 JPA는 쓰기 지연을 사용한다. 그래서 쓰기 지연 SQL 저장소에 쿼리를 모아두었다가, flush를 하면 그 순간 쿼리를 날려서 반영시키는 것이 보통. 근데 이전에도 한번 다뤘던 주제인데 @BeforeEach void setUp(){ User user = User.builder() .email("test@test.com") .profileImage("ex") .nickname("ex") .isOnline(false) .type("kakao").build(); User save = userRepository.save(user); System.out.println(save.getId()); } 여기서 save를 하면 분명 저장소에 모아둬야 하는..
RESTFUL API 서비스를 제작하면서 가장 고민하고 있는 부분이다.chat gpt로 추천을 받기 위해서는 1번의 request가 필요.jmeter로 100번 요청 보냈더니 벌써 gpt가 toManyRequest를 뱉으며 뻗어버렸다. 너무 많은 요청을 받게 하면 안 되는데... 그래서 생각했던 방법들 Synchronize그래서 싱크로나이즈를 쓸까 생각을 했다. 그러나 Synchronize를 쓰면 임계영역에 하나의 스레드만 가능하다.(즉 100개의 요청이 들어오면 하나씩 처리해야 해서 너무 오래 걸린다) 응답 시간을 측정했을 때, RestTemplate 기준 하나의 처리에 3초가 걸렸다. 이게 100명의 유저한테 온다면 마지막 유저는 300초는 기다려야 한다.(이게 말인가?)결국 탈락 WebClientG..
프로젝트하다가 매일 api 경로를 고민한 지 벌써 10만 번째.... 그냥 프롬프트 하나 만들어서 추천서비스 간단하게 만들면 좋지 않을까?라는 생각이 들었다. 제작 이유 1. chat gpt한테 직접 물어보자니 다 설명하기 귀찮기도 하고 얘가 또 말이 얼마나 많던지 2. 간단한 토이 프로젝트로 사용하기 위해 그래서 만들어보았습니다. 기능 1. 회원가입 2. 소셜로그인 3. chat gpt에게 추천받기 프로젝트는 Vue3와 SpringBoot 3.2.4를 이용했습니다. 주 기능은 3번입니다. 프롬프트 사용자에게 model, method, resource, content를 받아서 추천 3개의 restful api를 뽑아내는 것이 목표. 사실 따지고 들어가면 관리자인지 유저인지, 토큰을 사용하는지 등 세세하게..
· CS지식
HTTP : 하이퍼 텍스트 전송 프로토콜 (여기서는 HTTPS를 위해 간단하게 넘어가겠습니다.) HTTP -> 데이터가 평문으로 전송된다. 즉 패킷 도청으로 데이터 유출 가능성이 생김(보안상으로 매우 위험) 그래서 우리는 Security가 추가된 HTTPS를 사용하게 됩니다. HTTPS 데이터 전송의 보안을 강화하기 위해 사용 SSL/TSL 프로토콜을 통해 데이터 암호화 간단 정리 HTTP의 보안 문제를 해결하기 위해 SSL/TLS를 추가한 HTTPS를 사용한다. 그러면 HTTPS를 설정하는 과정, 데이터를 암호화해서 주고받는 과정에 대해 정리를 해보려고 합니다. SSL의 개념 Secure sockets layer의 약어(보안 소켓 계층) 전송되는 데이터를 암호화하는 표준 기술 TLS의 개념 Transp..
여태 프로젝트 진행하면서 동시성 문제에 대해 생각하지 않았다. 사실 그럴 힘이 없었다. 근데 자바에서는 멀티 스레드를 지원하는데 문제는 여기서 발생한다. 멀티 스레드 -> 즉 하나의 프로세스에서 여러 개의 스레드가 동시에 작업을 진행한다. 씈크럼 프로젝트에서 스크럼의 참여 인원을 +1 시키는 메서드가 존재한다. public void plusCurrentMember(){ if(this.maxMember 최대 멤버 : 20명, 현재 멤버 : 19명 만약에 두 유저가 해당 스크럼 정보를 통해 참여를 진행한다면? 둘 다 현재 참여가 가능하다고 판단해서 Update Query를 날리게 되고, 결국 데이터 정합성에 문제가 발생한다. 나는 여태 이런 경우를 생각하지 않고 진행했었는데 이제는 멀티 스레드에 대해 생각할..
· 오류해결
새 프로젝트를 생성해서 MySQL을 연결했는데 해당 에러가 발생했습니다. Access denied for user 'root'@'localhost' (using password: YES) spring: jpa: hibernate: ddl-auto: create show-sql: true datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/stock_example username: root password: 0000 yml 설정은 위와 같았고 cmd로 mysql 실행했을 때 비밀번호 0000으로 정상적으로 접속 성공했습니다. 많은 블로그 내용을 찾아봤지만 결국 password를 읽지 못하는 문제였고 ..
· JAVA
우선 내가 여태 알고있던 Java의 실행 과정이다. 1. 개발자가 작성한 .java 파일을 컴파일러가 .class(바이트코드 파일)로 변경한다. 2. JVM의 클래스 로더가 .class를 메모리에 적재시킨다.(런타임 시점) 3. JVM의 실행 엔진이 메모리에 적재된 바이트코드를 실행 시킨다. 간단하게 위 단계의 개념으로 알고있었는데, 조금더 세세하게 내부 개념을 정리해보려고 한다. 컴파일 과정 Java를 설치하면 javac.exe의 형태로 컴파일러가 먼저 설치된다. 자바 컴파일러가 개발자가 작성해놓은 .java 파일을 .class(바이트 코드)로 변경시켜주는 역할을 한다. 자바 코드 public class Human{ private final String name; private final int age..
indeep
'분류 전체보기' 카테고리의 글 목록 (8 Page)