분류 전체보기

· ETC
급한 성격상 일단 코드부터 두둘기면서 개발을 시작했는데, 이게 개발에 정말 안좋은 습관이란 걸 깨달았다..이런 생각을 들게 해준 발단카카오 developer 문서 보면서 OAuth 로그아웃을 구현하는데 문서보면서 무작정 따라 했다.문제가 문서를 제대로 안보고 따라해서 계속 오류를 마주침..... 예를 들어서 쿼리 파라미터로 들어가야하는 값이 body로 들어가서 계속 잘못된 요청이라고 떳다. 이걸 해결 못해서 1시간 동안 삽질했다. 회고해보면 내가 이렇게 해서 허비한 시간만 합쳐도 1년도 넘을 것 같다. 대학교 1학년부터 지금까지 개발할 때 이런식으로 했으니까...깨달은 점개발하기 전에 어떻게 개발할지 흐름이라도 작성하자.나무를 보지말고 숲을 보라는 말이 있듯이 개발도 똑같이 적용된다고 생각한다... 코..
문제 상황public class OAuth2LoginSecurityConfig { private final UserRepository userRepository; private final OAuthService oAuthService; //-> 여기서 ...}@Servicepublic interface OAuthService {} //GoogleOAuthService, KakaoOAuthService가 구현 오류 발생Parameter 1 of constructor in com.memo.login.oauth.CustomOAuthService required a bean of type 'com.memo.login.oauth.OAuthService' that could not be found.인터..
이전 포스팅에서 Spring Security 를 활용하지 않고 컨트롤러로 다 구현했다.이번에는 왜 Spring Security를 사용해서 OAuth를 구현해야하는지를 고려해보려고 한다.Spring Security?스프링 시큐리티는 강력하고 고도로 사용자 지정 가능한 인증 및 액세스 제어 프레임워크입니다. 스프링 기반 애플리케이션을 보호하기 위한 사실상의 표준입니다.스프링 시큐리티는 Java 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크입니다. 모든 스프링 프로젝트와 마찬가지로 스프링 시큐리티의 진정한 힘은 사용자 지정 요구 사항을 충족하기 위해 얼마나 쉽게 확장할 수 있는지에 달려 있습니다 스프링을 사용할 때 보안을 적용하고 싶다? 그럼 Spring Security를 사용해라...
OAuth(Open Authorization)OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대한 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준다. 구글에 로그인하면 API를 통해 연동된 계정의 Google Calender 정보를 가져와 사용자에게 보여줄 수 있다.이때 사용되는 프로토콜이 OAuth다. 더 잘 이해하기 위해 인증과 인가에 대한 개념을 구분해보자Authentication(인증): 유저 본인을 확인하는 과정(로그인)Authorization(인가): 인증 후 인가를 진행, 인가에 따라 유저 정보를 선택전으로 반환한다파티에 초대된 손님을 예로 들어보면,호스트가 파티에 입장하는 사람의..
· ETC
2024.08 매주 코테 스터디정처기 실기교내 해커톤 참여졸업 프로젝트 마무리2025 상반기 취업을 목표로 기본기와 실무지식을 쌓고, 이력서와 포폴을 완성하고자 부트캠프에 지원했다.부트캠프에 들어간 이유는 "기업과 협업"을 할 수 있는 기회가 있었기 때문이다.중고신입이 대세인 상황에서 인턴조차 하지 못한 나에겐 이걸로 내가 중고 신입이라는 걸 어필할 수 있겠다. 라는 생각이 들었다. 이때 정처기 실기와 매주 코테 스터디, 해커톤에 참여하였다.이 달은 유의미한 시간은 아니었던 거 같다. 그저 졸업프로젝트가 잘 마무리 되었으면 하는 마음이 컸다. 2024.09매주 코테 스터디실제 코테 응시졸업 프로젝트 끝부트캠프 프로젝트 진행개강이때부터 실제 기업에 지원하여 코테를 볼 수 있는 기회가 있었다. (물론 다 떨..
이전 포스팅에서 좋아요 동시 요청에서 데드락이 걸린 것에 대해 분석해 보았다.원인 요약좋아요를 저장하는 과정에서 like 테이블에 board 외래키가 있었고, 외래키로 인해 board의 레코드가 잠김(slock).정확히는 mysql에서는 인덱스 락인데 편의상 레코드 락이라고 하겠다.트랜잭션1: 좋아요 추가(board id = 1 레코드 slock)트랜잭션2: 좋아요 추가(board id = 1 레코드 slock)트랜잭션1: board id = 1 레코드 좋아요 수 update(xlock 획득하기 위해 대기)트랜잭션2: board id = 1 레코드 좋아요 수 update(xlock 획득하기 위해 대기)이 상황이라면 좋아요를 누르는 동시에 해당 게시물을 수정하는 일이 생긴다면 이때도 데드락 발생 가능Loc..
배경Mysql 8.0, Spring Boot 3, java 17 사용학교 게시판에 좋아요 기능이 있는데, 트래픽이 많아질 경우 좋아요 동시성 문제를 생각해 보게 되었다.유저 3개를 만들고 포스트맨의 collection을 활용해서 테스트를 해보았다.결과는 둘다 200 OK가 떳다.이는 포스트맨의 방식이 Delay가 아무리 줄어도 동기 방식이기 때문에 병렬로 동시에 보내는 요청이 아니고 순차적인 요청이었기 때문이었다. 그래서 원시적인 방법으로 curl로 테스트 해보기로 했다.터미널에 각 유저에 대한 요청 3개를 동시에 보냈다.curl --location --request POST 'http://localhost:9090/api/board/like?board_id=1' \--header 'Authorizati..
좋아요 동시성 테스트를 하다가 "데드락"이 발생하는 걸 보았다. 이를 해결하기 위해 Transaction 격리 수준에 대한 개념을 제대로 잡고, 해결하고자 작성하는 글이다.먼저, MySQL 을 사용하고 있어서 MySQL이 사용하는 락에 대해서 살펴보다가 동시성 제어를 위한 MVCC 의 등장 배경을 정리하고자 한다. 고전적인 락MVCC 등장 이전에 공유락(S-lock), 배타락(X-lock)으로 동시성 제어를 하고 있었다. 하지만 이 방식은 데이터 일관성을 보장해주지만 너무 느리다는 단점이 있다.공유락(Shared Lock)나 이 데이터 읽을 거예요.다른 읽는 트랜잭션? 오케이, 같이 읽자. 근데 누가 수정하려면, 내가 다 읽고 나서 해 주세요.공유락은 위와 같이 읽기 잠금이다. 내가 다 읽을 때까지 동일..
· 언어/JAVA
C언어에서 LinkedList라는 자료구조를 사용하려면 직접 구현해야함 → 자바는 JCF에서 만들어놓은 클래스를 사용하면 됨.💡 직접 구현하는 것과 JCF 사용하는 것 중 무엇이 좋은가?만들어 놓은데는 다 이유가 있다..알고리즘의 속도와 안정성에 있어 자바 언어 개발진들이 수십년에 걸쳐 JVM에 최적화시켜 개량해왔으니 우리는 그걸 가져다 쓰면 된다. 장점인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화 되어 있기에, 사용법을 익히기에도 편리하고 재사용성이 높다데이터 구조 및 알고리즘의 고성능 구현을 제공하여 프로그램의 성능과 품질을 향상관련없는 API 산의 상호 운용성을 제공 (상위 인터페이스 타입을 업캐스팅하여 사용) → 인터페이스 중심으로 사용 → 객체지향적이미 구현되어 있는 API를 제공..
hapBday
'분류 전체보기' 카테고리의 글 목록