전체 글
-
유지보수가 용이하도록 아키텍처 구성하기개발/Spring Boot 2024. 5. 24. 10:35
여러 게시판을 만들어야 하는 프로젝트를 진행하면서, 유지보수가 용이한 구성에 대해 고민하게 되었다.여러 게시판을 효과적으로 관리하고 향후 발생할 수 있는 문제들을 최소화하기 위해어떤 방법을 사용했는지 블로그에 공유하겠다.모든 게시판 엔티티의 공통 부모 클래스인 추상 Board 클래스를 정의하여, 모든 Board Entity가 이 추상클래스를 상속받도록 했다. Board를 굳이 추상 클래스로 정의한 이유는 Board 자체를 인스턴스화할 수 없도록 하기 위해서이다. Board들을 위와 같이 구성함으로써 제네릭을 사용해 Repository 코드를 아래와 같이 단순화할 수 있었다.public interface BoardRepository extends JpaRepository {} BoardService에서 ..
-
아키텍처 개선에 대한 고민개발/Spring Boot 2024. 5. 23. 17:30
원래 아키텍처는 위와 같은 모습이었다.첫번째 개선에서는 다음과 같은 일을 했다. 서비스 간 의존 결합도를 줄이기 위해 인터페이스 도입각 서비스가 인터페이스를 통해 상호 참조될 수 있도록 하여 결합도를 낮췄다. 이를 통해 서비스 간의 결합도를 낮추고 유연성을 높였다.PhotoService의 재사용성을 높이기 위해 역할 분리PhotoService의 재사용성을 높이기 위해 EncryptionService에 의존적이었던 메소드를 삭제하고, Encryption 관련 역할과 책임을 PhotoService에서 분리했다. 이를 통해 PhotoService는 더욱 독립적이고 재사용 가능하게 만들었다.EncryptionService의 역할 재정의암호화 역할을 명확히 하기 위해 Encryption을 Service에서 Com..
-
내 인생 첫 인턴을 마무리 하며개발/그 외 2024. 2. 24. 17:12
우당탕탕 모베란에서의 2개월간의 동계 방학 인턴이 마무리되었다. 벌써 2개월이 지났다니! 빠르게 지나간 시간이 믿기지 않는다. 주말마다 그 주에 뭘 배웠는지 복습해 보는 간단한 글을 적으려고 했는데 그건 너무 힘들어서 적지 못했다... 그래도 마무리 글은 꼭 적어야 할 것 같아 이렇게 글을 적어본다. 무엇을 했나? 회사에서 진행 중인 모 프로젝트에 백엔드 개발자로 참여하여 프로젝트의 관리자 부분을 제작하는 것을 도왔다. 무엇을 배웠나? "나만 알아볼 수 있는 코드는 의미가 없다"라는 것을 배웠다. 코틀린을 이용해서 스프링 부트 프로젝트를 해본 적이 없어서 모르는 것이 참 많았다. 마음 같아서는 사수님께 "처음부터 하나씩 설명해 주세요"라고 하고 싶었지만, 많이 바쁘시기도 했고 "이 정도는 내가 혼자 해야..
-
졸업작품을 만들며개발/그 외 2024. 1. 31. 15:25
들어가며 졸업작품을 만들면서 겪었던 일들과 그때마다 느꼈던 감정을 기록해두기 위해 이 글을 작성했다. 우리 운동앱 만들까? 우리들은 방학기간 동안 졸업작품을 위한 기획을 미리 정하기 위해 몇 차례 모여 회의를 진행했다. 우리에게 주어진 시간이 그렇게 많지 않았기 때에, 빠르게 주제를 정하기 위해서 가장 주목받는 키워드를 찾고 거기서 발전시켜 나가는 형태로 브레인스토밍을 진행했다. 그렇게 회의를 진행하던 중 2020년 이후 급 부상한 개인 운동 시장에 대한 이야기가 나왔고 이러한 시장을 겨냥한 앱을 만드는 것으로 의견이 모아졌다. 우리가 만들 앱은 주변 헬스장, 헬스장의 시설정보, 헬스장의 트레이너 목록을 간편하게 보여주고 또 트레이너와 매칭시켜 주는 기능을 포함하는 앱이었다 근데 재미가 없다... 기획하..
-
인천대학교 글로벌 앱센터 15.5기 파트장을 마무리 하면서개발/그 외 2023. 12. 23. 00:35
무엇을 했나? 23학년도 2학기 동안 앱센터에서 서버 파트장으로 활동하며 15.5기 서버 파트의 스터디를 이끌었다. 스터디를 진행하면서 파트원들에게 다양한 학습 기회를 제공하기 위해 노력했는데, 그 중심에는 내가 만든 커리큘럼이 있었다. 좋은 커리큘럼을 만들기 위해 고민했고, 아래와 같은 목표를 바탕으로 커리큘럼을 구성해 나갔다. Github Actions을 이용해 CI/CD 경험을 해 볼 수 있게 해 줄 것 따로 시간 내서 공부하는 게 아니라면 알지 못할 자잘한 지식들을 배울 수 있게 해 줄 것 다른 파트와 협업을 통해 일정 수준 이상의 결과물이 나올 수 있게 할 것 책에 나와있는 코드를 따라 치는 것만이 아니라, 협업 과정에서 필요한 지식을 쌓을 수 있게 해 줄 것 커리큘럼과 코드는 15.5기 Rep..
-
인천대학교 글로벌 앱센터 15기를 마무리 하면서개발/그 외 2023. 9. 2. 17:35
우물 안 개구리였던 내게 굉장히 좋은 경험이었다. 무엇을 배웠나? 서버 파트장의 주도로 스터디원들과 함께 SpringBoot의 기초적인 부분부터 ~ CI/CD까지의 이론을 공부한 후 배운 것을 바탕으로 To-Do List 애플리케이션을 직접 만들며 이론을 적용해 보는 시간을 가졌다. 처음에는 To-Do List 애플리케이션을 만드는 것이 만만하고 쉽게만 보였었는데, 스터디를 통해서 여러 가지를 배우고 난 뒤에는 제대로 서버 애플리케이션을 구성하는 것이 얼마나 어려운지 알게 되었다. 훌륭한 리더와 팀원들을 만나서 정말 많은 것을 배울 수 있었고, 다양한 주제에 대해 지식을 나누며 토론할 수 있어서 좋았다. 무엇이 새로웠나? Express.js 프레임워크를 통해 작은 프로젝트를 몇 개를 진행해 본 경험은 있..
-
제네릭개발/Java 2023. 7. 18. 17:16
제네릭은 Java 5부터 추가된 타입이다. 제네릭 타입을 이용하면 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 발견할 수 있다. 제네릭은 다음과 같은 이점을 가지고 있다. 1. 컴파일 시 강한 타입 체크가 가능해진다. 2. 타입 변환이 제거된다. 제네릭 타입 (class, interface) 타입을 파라미터로 가지는 클래스나 인터페이스를 말한다. 제네릭 타입은 이름 뒤에 부호가 붙고 사이에 타입 파라미터가 위치한다. 제네릭을 사용한 코드와 사용하지 않은 코드를 비교해 보면서 차이를 알아보자. public class Box { private Object object; public void set(Object object) { this.object = object; } public Object ge..
-
Spring Boot 3.X 에 Swagger3를 추가하기개발/Spring Boot 2023. 7. 16. 22:24
스프링 프로젝트에 의존성을 추가해준다. Maven org.springdoc springdoc-openapi-starter-webmvc-ui 2.1.0 Gradle // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.1.0' Swagger Configuration을 위한 클래스를 만들어준다. @Configuration public class SwaggerConfig { @Bean public OpenAPI springOpenAPI()..