프로젝트 22

검색 필터링 기능 구현(스프링 + mysql + java)

category, 날짜 등으로 필터링 처리가 된검색 결과를 전달하기 위해서 검색 필터링 api를 구현했다. 1. SearchRequestDto와 SearchResponseDto를 작성 위 모든 파라미터 값을 다 채울 필요는 없다. 2. RestController 작성. SearchRequestDto와 page, size의 정보를 파라미터로 받는다. 3. EventRepository에 검색 method 추가 SearchRequestDto의 각 항목마다 따로따로 method를 작성했다. 원래는 mysql 쿼리 하나로 통합검색을 구현하려고 했다. 그러나, 여러개의 keywords가 입력으로 들어오는 경우, keyword를 단어 여러개로 쪼개는 작업이 필요하다. 그리고 각 키워드에 대해서 검색한 리스트를 합쳐야..

프로젝트/잇타 2024.01.21

AWS S3를 사용하여 파일업로드

순서 요약 1. S3 bucket 생성 2. IAM 사용자 -> 정책 추가 3. gradle에 dependency 추가, yml 설정, S3UploaderService 생성, api 추가 1. S3 bucket을 생성한다. 다음 링크로 이동 -> https://s3.console.aws.amazon.com/s3/get-started?region=ap-northeast-2 https://s3.console.aws.amazon.com/s3/get-started?region=ap-northeast-2 s3.console.aws.amazon.com 버킷 만들기로 이동 -> 버킷이름 리전 설정. 객체 소유권 활성화 퍼블릭 엑세스 차단 해제 (->정책 편집하기 위함. 정책 편집 후 다시 차단) 나머지 설정 그대로 ..

프로젝트/잇타 2022.12.27

리눅스(linux) 실행권한

permission : r, w, x 순서 각각 읽기, 쓰기, 실행 permission 대상 : 사용자, 그룹, 공개 순서 rwxr-xr-x는 다음과 같음 사용자 권한 : rwx 그룹 권한 : r-x 공개 권한 : r-x 각각 r = 4, w = 2, x = 1 변환 read 권한만 준다면 4 write까지 권한을 준다면 6 실행권한까지 주면 7 로 표시한다. 따라서 chmod 700 은 사용자에게 모든 권한을 주고 그룹과 공개에는 권한이 없도록 해주는 명령어가 된다.

프로젝트/잇타 2022.12.04

branch 사용법

branch 사용법. 한 달 전에 찾아봤었다. 그 땐 알았던 거 같다. 근데 지금 하려고 보니 기억이 안난다. 그래서. 다시 알아봤다. 까먹지 말자. new_branch를 local에 만들었다. 그냥 아무것도 안하고 push를 눌렀다. remote branch가 하나 생긴다. new_branch가 생긴 것을 확인할 수 있다. 이렇게 remote branch와 local branch의 이름이 같은 것끼리 매핑이 된다. 그리고, remote new_branch를 remote master에 merge하고 싶으면, local에 있는 new_branch에서 local에 있는 master로 merge한다. 그 다음. master에서 remote master로 push해주면 된다. 아래 사진 참고. 자세한 순서. m..

프로젝트/잇타 2022.11.19

SOLID - 객체지향의 5가지 원칙

S : SRP(Single responsibility principle) - 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다. O : OCP(Open/closed principle) - 개방/폐쇄 원칙 : 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. L : LSP(LisKov substitution principle) - 리스코프 치환 원칙 : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. I : ISP(Interface segregation principle) - 인터페이스 분리 원칙 D : DIP(Dependency inversion principle) - 의존관계 역전 원칙 : 프로그래머는 추상화에 의존에야지 ..

백엔드 소셜로그인 구현 - 최대한 간략하게

맡고있는 프로젝트에서 소셜로그인을 구현해야하는데 구글링을 해서 따라하려고 해봤더니 전부다 너무 복잡해 보였다. 그리고 따라한다고 쳐도 제대로 이해하지 못하면 후에 기능을 추가해야하거나 버전을 바꿔서 실행할 때 문제가 발생할 것 같았다. 그래서 최대한 최소한의 코딩으로 소셜로그인만 어떻게 구현할 수 없을까라는 생각으로 한 번 알아봤다. 이해 하기 쉽게 거꾸로 controller부터 가보자 자. model에다가 member에서 꺼내온 name, email, picture을 넣어줬다. 그리고 이 member라는 것을 httpsession에서 getattrubute를 통해 가져온 것을 확인할 수 있다. 그렇다면 이 httpsession이라는 것은 무엇일까?(링크: https://muengx2.tistory.co..

프로젝트/잇타 2022.11.12

구글 소셜로그인 구현 - 2

프로젝트 구현 user 패키지 생성(import 생략) @Getter @NoArgsConstructor @Entity public class User extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private String email; @Column private String picture; @Enumerated(EnumType.STRING) @Column(nullable = false) private Role role; @Builder public..

구글 소셜로그인 구현 - 1

https://console.cloud.google.com/ Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com 위 링크로 접속한다. 그리고 프로젝트를 생성해준다. 나는 이미 test라는 이름의 프로젝트가 하나 있다. 새 프로젝트를 눌러 프로젝트를 하나 만들어준다. 프로젝트를 만들었다면, API 및 서비스 -> 사용자 인증정보 -> 동의화면 구성 -> OAuth 클라이언트 ID 순서대로 클릭해서 인증정보를 만들어준다. 승인된 리디렉션 URI는 http://localhost:8080/login/oauth2/code/google 을 입력해준다. 스프링 부트 2 버전의 시큐리티에서는 기본적으로 {도메인}/login/oauth2/code/{소셜서비스코드}..

수정, 삭제 화면 만들기

posts-update.mustache 생성 {{>layout/header}} 게시글 수정 글 번호 제목 작성자 내용 {{post.content}} 취소 수정 완료 삭제 {{>layout/footer}} 머스테치 문법을 써서 value에 {{posts.변수명}}을 넣어줬다. readonly를 사용하면 읽기만 가능하고 수정이 불가능하다. index.js에 update, delete function추가 var main = { init : function () { var _this = this; $('#btn-save').on('click', function () { _this.save(); }); $('#btn-update').on('click', function () { _this.update(); });..