웹 프로젝트 (IBAS)/SpringBoot api 개편

    [SpringBoot] 6. ManyToMany 를 "일대다/다대일"로 풀어서 사용하기 (+ 영속성 전이 문제)

    1. 배경 인가 시스템을 고민하면서, 수직적인 권한과 수평적인 권한을 분리했다. 수직적 권한 : (비회원->미승인회원->일반회원->회장단->회장->관리자) 수평적 권한 : 부서 (IT 부, 운영부, 총무, 홍보부 등) 수평적 권한을 처리하기 위해 Team 이라는 도메인을 추가하기로 했다. 지금 동아리 운영 상황을 보자면, 두 부서에서 동시에 활동하는 사람은 없지만 한 부서에서 다른 부서로 이동하는 경우, 중간에 임시로 동시 활동하는 경우 등이 있었고, 꼭 한 부서만 속해있으리라는 법은 없으니까. Member 와 Team 을 다대다 관계로 설정했다. 2. 다대다의 문제 jpa 에서 ManyToMany 관계를 지원하고 있어서, 해당 어노테이션을 사용해 풀어내면 정말 쉽다. 하지만 두 엔티티 사이의 관계가 그..

    [Spring boot] 5. 멀티모듈? MSA? 좋은 아키텍쳐가 뭐야?!

    [Spring boot] 5. 멀티모듈? MSA? 좋은 아키텍쳐가 뭐야?!

    프로젝트 구조 변경을 고민하게 된 배경이 몇가지 있다. (1) layer 는 구분이 가지만, 파일이 많아져서 해당 layer 안의 특정 도메인을 한눈에 찾기가 어려워지고 있다. 또 그렇다보니 어떤 도메인 모델이 어떤 service 와 controller 로 이어지는지 알기도 힘들어질 것 같았다. 특히 새로운 개발자가 들어왔을때는 확실히 눈에 안보일 거 같았다. (2) 또 파일 업로드 및 다운로드를 동료 개발자가 맡아서 처리하고 있는데, 해당 기능은 완전히 독립적인 서비스로 빠져도 될 것 같다는 생각이 들었다. (원격 서버에 실제 파일을 업로드하고 다운로드 하게 해주는 파일 서버). 같은 모듈 내에 있는 것보다는, 적어도 다른 모듈로 독립적으로 구성할 필요가 있다. (3) 빅데이터 및 ML 동아리이기 때문..

    [Spring Boot] 4. 로컬 개발을 위한 CORS 설정 - (1) w3c recommendation

    공식 레퍼런스 https://fetch.spec.whatwg.org/ [프론트 단에서의 비동기 통신 요청] - XMLHttpRequest 객체를 이용한 AJAX(AsynchronousJavaScript And XML (en-US)) 프로그래밍을 용이하게 하기 위해 jquery-ajax/fetch/axios 를 사용함. [서버 단에서의 비동기 통신 응답] - api 엔드포인트에서 적절한 응답을 보내주면 되는데, 이 때 CORS 정책을 잘 지켜주어야 한다. 1. CORS(Cross Origin Resource Sharing)란? - Origin 이 다른 경우에 자원을 주고 받을 수 있도록 하는 http 통신 프로토콜. - Origin 은 https://naver.com, http://localhost:808..

    [Spring Boot] 3. OAuth2 인증 설계 및 구현 (feat. Security FilterChain 분석)

    [Spring Boot] 3. OAuth2 인증 설계 및 구현 (feat. Security FilterChain 분석)

    이 게시글은 당시에 고민했던 내용으로, securityFilterChain 을 파헤치기 아주 좋은 공부였습니다. 현재는 인증 모듈을 구현 완료하여, https://github.com/InhaBas/Inhabas.com-api/wiki/Auth-module-document 에 자세히 작성하여 놓았습니다. 아래의 사진과 같이 OAuth2 인증을 통해 로그인/회원가입이 가능하도록 되어있다. 이를 spring 에서 구현해야하기 때문에, spring security 및 oauth2 인증 관련하여 공부했다. [spring security 구조] 아래 깃헙 이슈에서 자세히 기술해놓았다. spring security 구조를 파헤쳐보자 · Issue #48 · InhaBas/Inhabas.com-api 슬슬 소셜로그인도..

    [Spring Boot] 2. 서버 개발 환경 분리 (Spring Cloud Config 적용) 및 배포 자동화

    [배경] 기존의 장고 프로젝트를 배포서버와 개발서버로 나누어서 운영했음. ( 테스트 환경 설정파일 / 개발 서버 환경 설정파일 / 배포서버 환경 설정 파일 ) 모두 달랐다. 외부에 노출되면 안되는 정보들이 있어서 github 에 무턱대고 업로드 할 수가 없었다. => 로컬에서 직접 관리했다. 하나의 리눅스 서버 안에서, 유저를 나누어서 환경을 분리했다.. 프로젝트 하위에 rsync 로 직접 설정파일을 넣어주고 있었다. 빠르게 환경 설정 파일을 변경해야할 일들이 생겨서, 직접 리눅스 서버 파일을 수정했다가 나중에 내 로컬 원본을 수정했다 하면서, 설정파일 관리가 힘들어짐. 동아리 예산 문제, 학교 네트워크 문제 등으로 서버를 옮기거나 재시작해야하는 등 프로젝트를 새로운 환경에서 재빌딩하는일이 종종 있었는데..

    [Spring Boot] 1. 게시판 테이블 재설계

    [Spring Boot] 1. 게시판 테이블 재설계

    기존의 Django 레거시를 갈아 엎기로 하고나서, 처음으로 한 것은 게시판 테이블을 다시 설계한 것이다. www.inhabas.com 의 가장 핵심기능은 대부분 게시판이다. 기존의 레거시에서는 모든 게시판 종류마다 (게시판 테이블 + 댓글 테이블 + 파일 테이블) 이렇게 되어있었다. 자유게시판과 같이 새로운 게시판이 하나 더 늘어나면 게시판콤보세트(게시판 테이블 + 댓글 테이블 + 파일 테이블) 를 하나 만들고, 중복되는 비지니스 코드를 만들고, 권한검사에 추가하는 로직을 짰다. 근데 중복되는 비지니스 코드를 줄인다고, 엔티티매퍼를 따로 설정해서 게시글 타입 번호로 if else 엄청 쓰고, 그 중간에 권한 검사 if else 엄청 남발해서,,,,, 허허,,,, 그 개고생을 하면서 느낀것! 유지보수 불..