About Lala
간략한 소개
- code review 기업 문화에 관심이 많습니다.
- 기능에 중점적으로 개발하기보단 clean code와 객체지향 원칙을 잘 지키며 개발하고 싶습니다.
- 꾸준히 공부를 하려 노력하고 있으며, 공부한 내용은 정리하여 블로그에 작성하고 있습니다.
학력
- 서경대학교 경영학부 중퇴 (2013 ~ 2014)
경력
- 채워나갈 예정입니다!
자주받는 질문
- 비전공자인데 개발직을 선택하게 된 계기
- 아무나 할 수 있는 사무직 보다는 꾸준히 성장할 수 있는 전문직을 하고 싶었고 (관련은 없지만)컴퓨터 다루는 것에 자신이 있었던지라 코딩을 알아봤습니다. 코딩의 시작은 유튜브 생활코딩님의 java 강의를 보고 따라해보며 할 수 있다와 해보고 싶다라는 생각이 들어서 개발 공부를 시작하게 되었습니다.
- 국비학원을 끝까지 수료하지 않은 이유
- 마지막 달 전 까지 학원(미래능력개발교육원)에 출석했지만, 학원의 특성상 취업률을 올리기 위해 소위 말하는 경력 뻥튀기 업체와 연계가 되어있어서, 수료까지 2주정도 남은 상태에서 수료는 하지않고 개인적으로 더 준비해서 양심적으로 회사에 취직하고 싶었습니다.
연락
- email: gnsrudfk@naver.com
링크
stack
- JVM 메모리 구조에 대해 간략히 알고 있습니다.
- 객체지향원칙(SOLID) 대해서 공부했습니다.
- MVC패턴으로 간단한 CRUD 애플리케이션을 제작 할 수 있습니다.
- RESTAPI로 응답하는 경험을 해봤습니다.
- layered architecture에 대해 이해하고 있습니다.
- DI로 관심사를 분리하는 과정을 이해하고 있습니다.
- pointcut과 advice를 이용한 AOP에 대해 공부했습니다.
- dml문과 ddl문에 대해 알고 있습니다.
- index에 대해 알고 있습니다.
프로젝트 요약
Gather Up - 모임 관리 웹사이트
개요(클릭)
- 개요
- Gather Up은 온라인 강의를 참고하여 만든 1인 제작 프로젝트 입니다.
- 게임에서 파티를 맺는 것 처럼, 웹 상에서 한 ‘모임’에 가입하고 탈퇴하는 기능을 구현하고 싶어서 데이터를 collection처럼 다룰 수 있는 ORM을 선택하게 됐습니다.
- 프로젝트를 처음 개발 할 때는 DTO와 Entity를 나누는 이유도 모르고 architecture도 모른채로 온라인 강의의 코드, 설계와 많이 다르게 제작하여 간단한 리팩토링을 거쳤습니다.
- 기간
- 2021.10 ~ 2021.11
- 2022.04(리팩토링)
- 구현사항
- OAuth2.0을 사용하여 google 로그인 구현
- 게시물 및 댓글 CRUD
- javamailsender를 이용한 이메일 인증 token 전송
- 사용한 기술
- Languague: java 11
- Framework: spring boot, spring data JPA, spring security
- Database: H2, MySQL
- BuildTool: maven
움짤로 보는 동작(클릭)
- 회원가입 검증과 가입 후 자동로그인, 메일 보내기
- 회원가입시 랜덤한 토큰값을 저장해서, javamailsender를 이용해 메일을 보냅니다.
- InitBinder 어노테이션을 통해 form객체의 요청이 오면, validator 객체를 통해 중복값을 체크하거나, 같은 주소로 이메일을 많이 보내지 않게 방지합니다.
- 이메일 인증과 프로필 수정
- 파라미터의 token값을 통해 이메일 인증을 완료하면 정회원으로 등록되어 팀만들기와 게시판글쓰기 등의 활동이 가능해집니다.
- password는 인코딩되어 저장됩니다.
- 이메일 인증 전 db정보
- 이메일 인증 후 db정보(Role의 변화)
- 로그인
- 일반 로그인
- 앞서 만든 계정으로 로그인 합니다.
- 외부 로그인 - google 계정을 통해 로그인합니다. 로그인과 동시에 회원가입 처리가 되며 자동으로 정회원으로 등록됩니다.
- 일반 로그인
- 팀
- 팀 생성
- 팀을 만들기 위한 간단한 정보를 입력하고 생성하면 해당 계정은 팀의 관리자로 등록됩니다.
- 관리자는 모집 신청을 수락하거나 거절하는 등 팀의 설정이 가능합니다.
- 팀 가입하기
- 공개 중이며 모집 중인 팀은 가입신청이 활성화 되어 가입신청이 가능합니다.
- 관리자 계정이 수락을 해야 팀원으로 등록되고 팀의 인원이 늘어나는 것을 확인 할 수 있습니다.
- 팀 상태수정
- 관리자는 팀을 비공개로 하거나 모집을 중단하는 등의 상태를 변경 할 수 있습니다.
- 팀 생성
- 게시판
- 간단한 게시판과 댓글 CRUD 입니다.
프로젝트 구조(클릭)
- Spring Boot, Thymeleaf
템플릿 엔진(thymeleaf)를 이용해 객체를 담아 응답합니다. (JSON리턴 방식 X)
이후 REST API와 layered architecture를 알게되어 리팩토링 중에 있습니다.
- 패키지구조(리펙토링 전)
- config: security와 project configuration을 관리합니다.
- controller: controller들을 관리합니다.
- domain: entity이자 domain model을 관리합니다. (dto와 domain의 차이를 알기 전이라 dto처럼 사용하였습니다.)
- form: controller를 통해 thymeleaf에 보내지는 form객체들을 관리합니다.
- service: domain별로 비즈니스 로직을 정리한 service객체들을 관리합니다.
- validator: @initbinder를 이용하여 controller에서 form요청이 들어올 때 검증하도록 하는 객체들을 관리합니다.
- Spring Security
- csrf: disable
- hasAuthority(“ROLE_REGULAR”)를 이용하여 이메일 인증이 된 사용자만 접근가능 하도록 제한합니다.
- remember-me: JdbcTokenRepositoryImpl을 이용하여 persistlogin테이블의 토큰 값으로 로그인 유지 기능을 활성화합니다.
- form login: use
- DetailService, OAuth2Service : 로그인에 필요한 UserDtails와 외부 로그인에 필요한 OAuth2User를 상속받은 PrincipalDetail 클래스로 로그인을 구현했습니다.
- ORM
- JPA: 반복적인 CRUD작업을 처리합니다. collection개념으로 entity들의 관계를 다룰 수 있어서 선택했습니다.
- QueryDSL: JPA로 해결할 수 없는 복잡한 쿼리를 작성합니다.
- TeamReposityroExtension: QueryDSL Interface
- TeamRepositoryExtensionImpl.findByKeyword: QueryDSL Implements Class. 팀검색을 위한 용도로 작성됐습니다.