전체 글 111

[SSAFY] 2학기 공통 프로젝트 Collabit 회고

싸피 2학기의 첫 프로젝트, 공통 프로젝트가 끝났습니다.(사실 2주 전에 끝났는데 이제서야 회고를 작성합니다...)  01. 서비스 개요 프로젝트 주제는 협업능력 포트폴리오 제작 서비스였습니다.Collaborate와 IT를 합쳐 만든 서비스명, Collabit!  서비스의 핵심 기능은 크게 3가지로,Github 프로젝트를 등록하고,팀원들이 나의 협업 능력에 대한 AI 설문에 참여해주면,그 설문 결과를 바탕으로 리포트를 생성해줍니다. 02. 역할1) 팀장팀원들을 처음 모으면서 자연스레 팀장을 맡았습니다.중재를 잘한다는 점이 장점으로 작용했고,그에 비해 결단을 빠르게 내리지 못한다는 점이 아쉬웠습니다.이번 특화 프로젝트에서도 팀장을 맡았는데 이제는 결단을 잘 내리기 위해 노력 중입니다. 2) 백엔드 리드팀원..

Programming/SSAFY 2025.03.09

[Collabit 프로젝트] WebSocket + STOMP + Redis로 채팅 구현하기

실시간 채팅 시스템에는 클라이언트와 서버 간의 빠르고 안정적인 메시지 전송이 필요합니다.이번 프로젝트에서는 WebSocket, Redis, STOMP 기술을 사용해 채팅 기능을 구현하였습니다. 서버 측 구현1. WebSocket 설정WebSocket은 클라이언트와 서버 간의 양방향 실시간 통신을 제공하는 프로토콜로,실시간 채팅 기능 구현에서 매우 중요한 역할을 합니다.Spring에서 WebSocket을 활성화하려면 @EnableWebSocketMessageBroker 어노테이션을 사용하여STOMP 프로토콜을 통해 메시지를 주고받을 수 있도록 설정합니다. @Configuration@EnableWebSocketMessageBroker@RequiredArgsConstructorpublic class WebSo..

Programming/Project 2025.02.23

[JPA] JPA의 다양한 연관관계 매핑 (다대일, 일대다, 일대일, 다대다)

엔티티의 연관관계를 매핑할 때, 다중성, 단방향/양방향, 그리고 연관관계의 주인을 고려해야 합니다.이를 바탕으로 모든 연관관계 유형을 정리하겠습니다. 01 다대일 (Many-to-One)1. 다대일 단방향 [N:1]다수의 엔티티가 하나의 엔티티와 연관되는 관계입니다.단방향으로 설정하면 하나의 엔티티에서만 참조할 수 있습니다.여러 회원이 하나의 팀에 소속된 상황을 예로 들 수 있습니다.@Entitypublic class Member { @ManyToOne @JoinColumn(name = "team_id") // 외래 키 컬럼 private Team team;}@Entitypublic class Team { @Id private Long id; private String n..

BackEnd/JPA 2025.02.02

[운영체제] 자바의 스레드와 멀티스레드 기본 개념

01 서론운영체제에 대해 공부하며 CPU 성능과 자원 활용에 관심을 가지게 되었습니다.특히, 기술의 발전으로 코어가 여러 개인 프로세서 환경에서 CPU의 활용에 따라 프로그램 성능이 달라질 수 있다는 점에 주목했습니다.자바에서 스레드와 멀티스레드는 프로그램의 성능을 향상시키고, 효율적인 작업 처리를 가능하게 하는 중요한 개념입니다.이 글에서는 자바의 스레드와 멀티스레드의 기본 개념을 정리하고 실제로 이를 어떻게 활용하는지 예시 코드를 작성해보았습니다.02 스레드와 멀티스레드의 기본 개념1. 프로세스란 무엇인가?먼저, 프로세스란 CPU에 의해 메모리에 올려져 실행중인 프로그램을 의미하고 독립적인 실행 환경을 가진다는 특징이 있습니다.자바 JVM은 하나의 프로세스로 실행이 되지만, 여러 작업을 동시에 처리..

[Project / Collabit] 우리 프로젝트에 Redis를 적용해야 하는 이유

작년에 토스 면접을 준비하며 Redis를 처음 접했습니다.프로젝트에 적용해보고 싶었지만 소규모인데다 시간이 부족해 적용하지 못했던 Redis를 이번 프로젝트에 적용해보게 되었습니다.어떤 기술을 프로젝트에 사용할 때는 그 기술을 사용하는 당위성이 필요하다고 생각합니다.왜 많은 기술 중 Redis를 고르게 되었는지, 왜 프로젝트에 이 기술을 적용해야 하는지 정리해보려 합니다.01 Redis란?Redis(Remote Dictionary Server)는 고성능 키-값 저장소로, 오픈 소스 기반의 NoSQL 데이터베이스입니다.데이터의 빠른 처리를 위해 메모리에 데이터를 저장하고, 필요에 따라 디스크에 데이터를 지속적으로 저장하여 데이터 손실을 방지합니다.다양한 데이터 타입을 지원하며, 캐싱, 세션 관리, 메시지 ..

Programming/Project 2025.01.19

[컴퓨터구조] 자바는 컴파일 언어일까 인터프리터 언어일까?

프로그래밍 언어는 컴파일 언어와 인터프리터 언어로 분류할 수 있습니다.현재 백엔드 개발을 위해 사용하고 있는 자바는 둘 중 어디에 해당하는지 궁금해졌습니다.이 글에서는 컴파일 언어와 인터프리터 언어의 차이를 살펴보고, 자바를 이 관점에서 어떻게 이해할 수 있는지 정리해보았습니다.01 프로그래밍 언어의 분류1. 컴파일 언어란?컴파일 언어는 소스 코드를 기계어로 변환하는 컴파일러를 사용하여 프로그램을 실행합니다.컴파일 언어의 특징은 다음과 같습니다.컴파일 과정: 전체 소스 코드를 한 번에 번역하여 실행 가능한 파일을 생성합니다.빠른 실행 속도: 기계어로 변환된 실행 파일을 사용하기 때문에 실행 속도가 빠릅니다.플랫폼 의존성: 컴파일된 파일은 특정 운영 체제와 하드웨어에서만 실행됩니다.대표적인 컴파일 언어로는..

[네트워크] 로드밸런싱의 정의와 알고리즘

네트워크 스터디를 진행하며 마지막 챕터인 네트워크 심화를 주제로 공부를 하며로드밸런싱의 정의와 필요성, 관련 알고리즘에 대해 정리해보았습니다.1. 로드밸런싱이란로드밸런싱은 여러 서버를 두고 트래픽을 고르게 분산시켜 시스템의 성능과 안정성을 높이는 기술입니다.하나의 서버에 요청이 몰리지 않도록 하여 서버 과부하를 막습니다.2. 로드 밸런싱의 필요성과거에는 한 대의 서버만으로도 클라이언트 요청을 처리하는데 문제가 없었습니다.하지만 현대의 애플리케이션에서는 사용자 요구가 증가하고 비즈니스가 복잡해져 서버 부하가 증가했습니다.동시에 많은 사용자들이 요청을 보내는 대용량 트래픽 상황에서 서버의 부하를 줄이기 위한 분산 처리 시스템 구현을 위해 로드 밸런싱을 채택할 수 있습니다.로드 밸런싱을 통해 서버 과부하를 방..

[React] React + Tailwind CSS 시작하기

이전에 리액트 프로젝트를 진행할 때는 주로 SCSS를 사용해왔습니다.SCSS는 CSS를 확장한 기능으로 가독성이 좋고 재사용 가능한 스타일링에 유용했지만이제는 프로젝트에서 많이 사용하는 Tailwind를 도입해보기로 했습니다.1. SCSS vs Tailwind CSS1) SCSSSCSS는 가독성 높은 코드와 변수, 믹스인, 중첩 규칙으로 유연한 스타일링이 가능합니다.하지만 큰 프로젝트에서는 스타일이 충돌할 수 있고 관리가 어렵습니다.2) Tailwind CSS테일윈드는 클래스를 통해 스타일을 빠르게 작성할 수 있습니다.하지만 초기 학습이 필요하고 클래스 네이밍이 길어질 수 있습니다.이러한 SCSS 대신 Tailwind를 사용하여 생산성을 높이고 유지보수를 간편히 할 수 있을 것이라 생각해 이번 프로젝트에..

FrontEnd/React 2025.01.05

[Spring] Spring Security + JWT 구현하기

RESTful API와 같이 상태를 유지하지 않는 아키텍처에서 클라이언트와 서버 간의 인증 상태를 효율적으로 관리하는 것이 매우 중요합니다.이때 널리 사용되는 인증 방식 중 하나가 JWT입니다.JWT는 가볍고 자체적으로 필요한 정보를 포함하고 있어, 세션 관리가 필요 없는 환경에서 유리합니다.이를 통해 인증 상태를 클라이언트가 보관하고, 서버는 각 요청에서 JWT를 검증하여 인증을 처리할 수 있습니다.이번 글에서는 Spring Security와 JWT를 활용하여 인증 시스템을 구축하는 방법을 정리해보겠습니다.1. JWT란?JWT (JSON Web Token)는 JSON 기반의 토큰으로, 클라이언트와 서버 간에 인증 및 정보 교환에 사용됩니다.JWT는 다음과 같은 특징을 가지고 있습니다:세션을 사용하지 않..

BackEnd/Spring 2024.12.21

[JPA] JPA 엔티티 기본 매핑 어노테이션 완벽 정리

01 엔티티 매핑이란?JPA에서 엔티티는 데이터베이스 테이블과 매핑되는 객체입니다.엔티티 매핑은 객체 중심의 프로그래밍과 관계형 데이터베이스의 데이터를 연결하는 핵심 요소로, 객체와 테이블 간의 매핑을 설정해줍니다.이를 통해 개발자는 SQL을 직접 작성하지 않고도 객체를 통해 데이터베이스를 다룰 수 있습니다.이번 글에서는 기본적인 매핑 어노테이션을 정리해보겠습니다.02 @Entity와 @Table1. @Entity@Entity는 JPA에서 엔티티 클래스를 정의하는 데 사용됩니다. 이 어노테이션이 선언된 클래스는 데이터베이스 테이블과 매핑됩니다.속성name : JPA에서 사용할 엔티티 이름을 지정합니다. 기본값은 클래스 이름과 동일합니다.주의사항기본 생성자가 반드시 필요합니다.final, enum, int..

BackEnd/JPA 2024.12.20