
<aside> 📁
Antwork는 사내 커뮤니티 그룹웨어 협업 시스템으로, 프로젝트, 채팅, 캘린더, 게시판, 드라이브, 관리자 기능 등을 하나의 플랫폼에서 제공하여 생산성을 높이는 것을 목표로 합니다.
</aside>
| 프로젝트 주제 | Java, Spring Boot 활용 사내커뮤니티 그룹웨어 개발 |
|---|---|
| 프로젝트 기간 | 2024.11.18 ~ 2024.12.27 (6주) |
| 배경 및 목적 | [목표] |
2. FO(Front Office) 회원 : Session을 기반으로 한 인증/인가 기능 구현 게시판 : BO를 통해 등록된 게시판의 표출 기능 및 페이징 처리,게시글, 댓글 등록 기능 구현 검색 : 키워드를 통한 검색 기능의 구현 멤버쉽 : 결제를 통해 유료 기능(유료 게시판 조회) 구현 고객센터 : 1:1문의를 할 수 있는 페이지 구현
3. API 서버 BO, FO를 지원하는 API 서버 구현 | | 배포 주소 | http://3.34.40.220/ | | 깃허브 | 프론트엔드 저장소, 백엔드 저장소 |
<aside> <img src="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" alt="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" width="40px" />

개발 및 기여 내용
| 구현 기능 | 기여도 설명 |
|---|---|
| **카테고리 생성 모달/ | |
| 입력값 검증** | • React 모달(+Zustand)로 제목·설명 입력 후 공백·중복명 검증 후 카테고리 생성 |
| • 성공 시 토스트 알림 및 사이드바 즉시 갱신, 새로고침 없이 카테고리 추가 | |
| **카테고리 목록 캐싱/ | |
| 렌더링** | |
| • 앱 시작 단계에 한 번만 목록을 불러와 전역 상태로 보관 | |
| • 사이드바·드롭다운 등 여러 컴포넌트가 동일 데이터를 재사용해 불필요한 재요청 방지 | |
| **카테고리별 | |
| 게시글 접근 링크** | • 사이드바에서 동적으로 생성된 카테고리 항목을 클릭하면 해당 카테고리 ID를 포함한 URL로 이동 |
| • URL 파라미터 기반 라우팅으로 검색·페이징·새로고침 이후에도 동일 카테고리 컨텍스트를 유지해 일관된 사용자 경험 제공 |
</aside>
<aside> <img src="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" alt="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" width="40px" />
개발 및 기여 내용
| 구현 기능 | 설명 |
|---|---|
| 입력값 검증 | • 제목·내용 입력 시 trim()으로 공백 제거, 빈 값일 경우 alert 경고 |
| • 클라이언트 측 검사로 서버 요청 감소 | |
| • 사용자 입력 오류 방지 및 서버 부하 절감 | |
| **인라인 수정 | |
| (Inline Edit)** | • React useState로 수정 모드(isUpdate) 구현, 동일 페이지에서 즉시 수정. 새로고침 제거 → 사용자 중심으로 설계 |
| • FormData로 수정 데이터 전송, 스프링 JPA Dirty Checking으로 변경 필드만 업데이트해 트래픽과 I/O 최소화 | |
| • 클릭 수 감소로 사용자 경험 개선 및 코드 복잡도↓ | |
| **첨부파일 관리 | |
| (업로드)** | • 드래그 앤 드롭 UI로 파일 선택, FormData로 최대 10MB 파일 업로드 |
| • BoardFileUpload 컴포넌트 재사용으로 코드 중복 감소 | |
| • 직관적 파일 업로드와 개발 효율성 증대 | |
| **권한 기반 | |
| 수정·삭제** | |
| • React 조건부 렌더링으로 작성자만 수정/삭제 버튼 표시 | |
| • Spring Security로 작성자 ID 검증 | |
| • 보안 강화 및 작성자 중심 UX 제공 | |
| **클라이언트-서버 | |
| 분리** | • React SPA로 UI, Spring Boot REST API로 데이터 처리 |
| • axios 로 API 호출 통합 | |
| • 시스템 안정성 및 코드 유지보수성 향상 | |
| 안전한 삭제 처리 | • 2단계 확인 모달로 실수 삭제 방지 및 삭제 완료 후 자동 목록 리다이렉트 구현 |
| • 게시글 삭제 시 연관된 첨부파일과 댓글을 cascade 방식으로 일괄 정리하여 데이터 정합성 보장 | |
| • 삭제된 게시글 URL 직접 접근 시 404 처리로 완전한 삭제 상태 관리 |
.jpg)
.jpg)
</aside>
<aside> <img src="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" alt="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" width="40px" />
.jpg)
.jpg)
개발 및 기여 내용
| 구현 기능 | 설명 |
|---|---|
| **첨부파일 목록/ | |
| 대용량 표시** | |
| • 게시글 상세 페이지에서 첨부파일 전체를 리스트로 제공 | |
| • 파일명, 용량, 100MB 이상 파일은 ‘대용량’으로 구분하여 사용자 인식 용이 | |
| 저장 구조 설계 | |
| • UUID 기반 파일명을 사용하여 이름 충돌 없이 업로드 | |
| • 다양한 확장자 대응 및 서버 디렉토리 구조 유지로 운영 안정성 확보 | |
| **안정적인 | |
| 다운로드 처리** | |
| • 서버에서 파일 존재 여부·권한을 검증한 후 응답 제공 → 오류 발생 가능성 최소화 | |
| • 파일이 실제 서버에 존재하는지, 권한이 유효한지를 서버 측에서 사전 확인 | |
| • 응답이 문제 없을 때만 파일을 사용자에게 제공하여 오류 가능성 제거 | |
| 간편한 다운로드 흐름 | • 클릭 즉시 다운로드 실행, 페이지 전환 없이 파일 접근 가능 |
| **게시글 좋아요 | |
| (토글 방식)** | • 한 번 클릭으로 좋아요 등록, 다시 클릭 시 취소되는 토글 구조로 설계 |
| • 불필요한 중복 클릭 방지와 직관적인 UI 제공 → 사용자 경험(UX) 간소화 | |
| **좋아요 상태 저장/ | |
| 전환 처리** | |
| • 사용자와 게시글 간 1:1 관계를 유지하기 위해 BoardLike 테이블 사용 | |
| • 기존 좋아요 기록 존재 시 → 삭제, 없으면 → 등록 | |
| • existsByBoardIdAndUserId()로 상태 판별 → 데이터 무결성 확보 | |
| **좋아요 수/ | |
| 상태 실시간 반영** | |
| • 좋아요 버튼 클릭 시 서버 응답으로 받은 likeCount, liked를 기반으로 클라이언트에서 즉시 UI 상태 변경 | |
| • 새로고침 없이도 반응형 UX 제공 → SPA 장점 활용 | |
| 상태값 동기화 | • 클라이언트는 좋아요 수와 상태를 useState로 관리하되, 서버에서 응답받은 최신 상태로 갱신 |
| • 리스트/상세 페이지 간 좋아요 수의 데이터 일관성 유지 | |
| </aside> |
<aside> <img src="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" alt="notion://custom_emoji/05b1ac8a-59e5-41ce-bdf8-3d2507e07b93/1b626d45-1b22-80fd-a3d6-007afb26ef57" width="40px" />
개발 및 기여 내용
| 구현 기능 | 설명 |
|---|---|
| **댓글 CRUD API | |
| 설계** | • Spring Boot 기반 RESTful API로 댓글의 생성(POST), 조회(GET), 수정(PUT), 삭제(DELETE) 엔드포인트 구현 |
| • React 클라이언트에서 axios를 통해 비동기 통신하여 실시간 댓글 관리 시스템 구축 | |
| 비밀댓글 권한 제어 | • 댓글 엔티티의 isSecret 플래그와 Spring Security 인증 정보를 활용한 접근 제어 로직 구현 |
| • 작성자 본인만 비밀댓글 내용 확인 가능하며, 일반 사용자에게는 "🔐 비밀 댓글입니다" 메시지로 대체 표시 | |
| 동적 댓글 카운팅 | • React 상태 관리(useState)를 통해 댓글 배열 길이를 실시간 계산하여 UI에 반영 |
| • 댓글 추가/삭제 시 즉시 카운트가 업데이트되는 반응형 인터페이스 구현 | |
| **권한별 | |
| 수정/삭제 제어** | J• WT 토큰에서 추출한 사용자 ID와 댓글 작성자 ID 비교를 통한 권한 검증 |
| • 본인이 작성한 댓글에만 수정/삭제 버튼을 조건부 렌더링하여 UI 레벨에서 접근 제어 | |
| **클라이언트-서버 | |
| 분리 아키텍처** | • React SPA(Single Page Application)에서 Spring Boot REST API를 호출하는 분리형 구조. |
| • 프론트엔드는 사용자 인터페이스와 상태 관리를 담당하고, 백엔드는 비즈니스 로직과 데이터 처리를 전담하는 역할 분리 | |
| **실시간 UI | |
| 상태 동기화** | • 댓글 작성/수정/삭제 후 서버 응답을 받아 React 컴포넌트 state를 즉시 업데이트 |
| • 전체 페이지 새로고침 없이 변경사항이 UI에 즉시 반영되는 사용자 경험 제공 |

%E1%84%87%E1%85%A5%E1%84%90%E1%85%B3%E1%86%AB%E1%84%82%E1%85%A9%E1%84%8E%E1%85%AE%E1%86%AF.jpg)
</aside>

백엔드 주요 라이브러리
| 카테고리 | 라이브러리 | 버전 | 설명 |
|---|---|---|---|
| 데이터베이스 연동 | mysql-connector-java | 8.0.33 | MySQL DB 연결용 JDBC 드라이버. 장기 지원(LTS) 버전으로 보안 및 안정성 강화 |
| ORM & DB 관리 | hibernate-core | 6.5.2 | JPA 표준 구현체로 객체-관계 매핑 자동화. 복잡한 SQL 작성 최소화 |
| ORM & DB 관리 | spring-data-jpa | (Spring Boot 관리) | JPA 추상화 레이어 제공. CRUD 메서드 자동 생성, 생산성 향상 |
| 인증 & 보안 | spring-security-oauth2-client | 6.3.3 | OAuth2 클라이언트 기능 제공. 카카오/구글 등 소셜 로그인 연동 |
| JWT 인증 | jjwt-api, jjwt-impl, jjwt-jackson | 0.12.3 | JWT 기반 인증. 세션 없는 Stateless 구조로 확장성 확보 |
| 템플릿 보안 | thymeleaf-extras-springsecurity6 | 3.1.2.RELEASE | Thymeleaf 템플릿에서 Spring Security 권한 기반 UI 제어 가능 |
| 객체 매핑 | modelmapper | 3.2.1 | DTO ↔ Entity 간 자동 변환. 반복 코드 제거, 계층 간 데이터 전달 효율화 |
| API 통신 | jackson-databind | (Spring Boot 관리) | JSON 직렬화/역직렬화. REST API 통신에 필수 |
| 동적 쿼리 | querydsl-jpa, querydsl-apt | 5.1.0:jakarta | 타입 안전한 쿼리 생성. 복잡한 조건 처리, 컴파일 시점 오류 방지 |
| 표준 API | jakarta.annotation-api, jakarta.persistence-api | (Spring Boot 관리) | Jakarta EE 표준 API. 벤더 종속성 최소화, 유지보수 용이 |
| 코드 자동화 | lombok | 1.18.28 | @Getter, @Builder 등 코드 자동 생성. 간결하고 가독성 높은 코드 작성 가능 |
| 개발 편의 | spring-boot-devtools | (Spring Boot 관리) | 코드 수정 시 자동 리빌드, 개발 생산성 향상 |
| 테스트 | spring-boot-starter-test, junit-platform-launcher | (Spring Boot 관리) | 단위/통합 테스트 지원. CI/CD와 통합 가능 |
프론트엔드 주요 라이브러리
| --- | --- | --- | --- |
인프라 및 툴
| --- | --- | --- | --- |