일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- oauth 로그인
- 스프링 오어스
- 쿠버네티스 #fabric8
- hibe
- 스프링 시큐리티 없이
- spring 채팅방
- jpa 최적화
- 채팅방 구현
- 로또 등수 알고리즘
- 로또 등수 코드
- 스프링 환경변수 설정
- jpa bulk insert
- 멀티뷰
- 로또 앱 만들기
- springboot
- jpa dto 매핑
- 리사이클러뷰
- 리사이클러뷰 멀티뷰
- 스프링 소셜 로그인
- multiview
- 뷰 페이징
- 쿠버네티스
- 안드로이드 스튜디오
- java
- mysql multi-row insert
- 중간 테이블 엔티티 최적화
- Androoid Studio
- 스프링 환경변수
- android studio
- .env
- Today
- Total
목록스프링 (11)
야미의 개발
자꾸 테이블이 없다고 뭔가 테이블 생성시 충돌이 났습니다. ㅜㅜㅜㅜㅜㅜ확인해보니 init.sql과 schema.sql을 추가했는데 이게 빌드시에 자동으로 읽어져서dev에서는 validate르 쓰고,test 쪽에서는 JPA를 create를 사용하는데 schema랑 충돌이 되어서 생긴 문제 입니다. 해결이 되었습니다.(참고: MySql을 사용하는경우에 mysql의 설정을 h2가 이해하도록 아래와 같은 모드 설정을 해야지만 create 옵션시에 테이블을 잘 생성합니다.) 파이프라인 코드backend와 frontend 코드가 함께 있는 레포라서 이렇게 작성하였습니다.job_build: stage: build tags: - develop script: - echo "📌 Gradle 빌드 시작! ..

개요채팅방에서 사용자를 참여시킬때 기존의 로직에서는 한명씩 참여시켰습니다. 이로 인해사용자를 찾고, 참여시키는 로직이 중복됨에 따라1. 로직적으로 2. 쿼리적으로 성능을 개선하여, 부하를 줄이도록 서비스의 성능을 개선하였습니다.한편 이때 bulk insert를 구현해보면서 mysql 과 JPA의 조합에서 어떻게 하면 구현이 가능한지 알아보았습니다.기존 로직사용자가 한 명씩 채팅방에 참여한다.joinRoom 메소드에서 사용자를 한명씩 찾아서 그에 필요한 ChatRoomMessageCounter와 같은 객체들을 찾아서 저장하는 로직이 중복되고 있습니다.여기에서 로직적으로 개선 가능한 부분은 1. 사용자를 찾을 때 쿼리에 IN 절을 사용하여 한번의 쿼리로 유저 검색이 가능하다2. 참여하는 채팅방과 사용자가 몇..
소셜로그인을 직접 구현하기 위해서는 오어스에 대한 이해가 필요합니다.https://guide.ncloud-docs.com/docs/b2bpls-oauth2먼저 오어스의 개념을 학습한 뒤에 구현을 진행해보겠습니다. 구현에서 중요한 포인트는1. 각 소셜로그인을 로그인을 위한 주소가 필요하다2. 리소스 오너(로그인을 하는 주체)가 로그인을 하고나서는 Authorization Code라는 것이 발급되고 3. 이 코드로 리소스 서버(로그인을 하는 주체의 정보)에 접근 가능한 Access Token을 발급 받아4. 그 토큰으로 정보를 가져온다는 것입니다. 아래 코드의 구현에서는 플로우 기준 설명1. 프론트가 로그인을 하고자 하는 social provider(구글 , 페이스북 등)의 인증을 위한 url을 받습니다...
테스트 코드쪽이 env 파일의 플러그인 설정이 번거롭다고 생각했음... 근데 문제는 번거로운거 뿐만 아니고 그냥 플러그인이 안먹혔다... 스프링 버전 2.6 이상에서 부터는 이렇게 하면 플러그인 없이도 .env 파일이 읽힌다!spring: config: import: optional:file:.env[.properties]
주키퍼 하나에 3개의 카프카 브로커를 두는 설정입니다.뿐만 아니라 kafka-ui도 함께 설정해서 8989 포트로 모니터링 할 수 있습니다. docker-compose.ymlversion: '3.8'services: zookeeper-1: image: confluentinc/cp-zookeeper:latest ports: - '32181:32181' environment: ZOOKEEPER_CLIENT_PORT: 32181 ZOOKEEPER_TICK_TIME: 2000 kafka-1: image: confluentinc/cp-kafka:latest ports: - '9092:9092' depends_on: - zookeepe..
최초 연결(CONNCECT)에서 인증을 하고 그 이후의 인증이 없으면 principal을 없다고 하는 문제인거같습니다.따라서 아래의 코드처럼 StompHeaderAccessor accessor = MessageHeaderAccessor .getAccessor(message, StompHeaderAccessor.class);위의 코드를 추가해서 기존의 accessor가 존재하면 반환해 주는 것입니다. 사실 기본적인 코드는 아래와 같습니다.StompHeaderAccessor accessor = StompHeaderAccessor.wrap(message); 이 코드는 모든 메시지에서 accessor를 새로 만들어서 주는 코드입니다.하지만 제가 구현한 코드의 경우에는 연결뿐 아니라 연결 후에 메시..
swaggger에 api 테스트를 하는데 get 말고 모든 요청이 403 오류가 남서칭을 해보니 swagger의 cors 오류가 403을 반환한다고함(나는 안해봤지만 다른 api 테스트 도구는 괜찮은데 스웨거에서만 발생하는 오류) 그래서 cors에 https://도메인을 추가해주엇음그랬더니 문제 해결! 이유는 모르겠지만 추후에 알게되면 올릴것......
@GetMapping("/{provider}/authorize") public ResponseEntity getAuthorizationUrl(@PathVariable SocialType provider) { String authorizationUrl = loginService.getAuthorizationUrl(provider); return ResponseEntity.ok(new UriResponse(authorizationUrl)); } 소셜 로그인에서 pathvariable에 있는 값을 String이 아닌 Enum으로 바로 받아서 구현해 보았다. 일단 이렇게 하려면 Converter가 필요하다 public enum SocialType { GOOGLE(Goo..