전체 글

프로젝트 회고

[번개 모임 프로젝트 회고] 소개 및 배경

2024.04.18~2024.05.28까지 진행했던 프로젝트에 대해서 회고해 보고 사용되었던 기술이나 어떻게 기능을 구현했는지에 대해서 작성해보려고 한다.프로젝트는 4명에서 시작했지만 한분이 취업을 하셔서 총 3명으로 모든 프로젝트를 진행하였다.주제는 '위치정보를 활용한 웹사이트를 만들어보자'는 주제에서 시작하여 회의를 통해 발전시켜 나가면서 진행되었다.최종적으로, 지도를 기반으로 사용자 주변에서 번개 모임을 주최하고 참여하는 웹사이트를 개발하기로 결정했다.프로젝트 이름은 뭔가 익숙한 이름의 '번개 어때'로 결정했다. 파트 분배는 , , 3가지로 나누어서 맡게 되었고 나는 팀장이자 번개 모임 관련 기능을 맡았다.모두 백엔드 개발자를 희망하였기 때문에 react 같은 프론트엔드 프레임워크나 라이브러리는 ..

Back-end/JPA

순환 참조(+ DTO를 사용해야 하는 이유)

팀 프로젝트를 진행하던 중, 한 팀원이 postman으로 api를 테스트했더니 값이 무한으로 출력된다고 말하면서 해당 부분을 아래처럼 수정했더니 정상 작동한다고 수정해도 되냐고 물었다. @ManyToOne @JoinColumn(name = "group_id") private Group group; -> @Column(name = "group_id") private Long groupId; @OneToMany(mappedBy = "group") private Set groupMembers = new HashSet(); -> @OneToMany(mappedBy = "groupId") private Set groupMembers;JPA는 객체 ..

Back-end/Spring

@Transactional

@Transactional 어노테이션은 Spring에서 사용되는 어노테이션으로 주로 Service 계층에서 사용된다.아무 생각 없이 사용하던 @Transactional이 어떻게 사용되고 어떻게 동작하는지에 대해서 알아보도록 하자. @Transactional 어노테이션은 메서드나 클래스의 트랜잭션 경계를 선언하는 데 사용되는데, 여기서 트랜잭션이란 데이터베이스에서 일련의 작업들이 전부 성공하거나 전부 실패하도록 보장하는 것을 의미하고 이를 통해 데이터의 일관성과 무결성을 유지할 수 있다.@Transactional 어노테이션이 사용된 클래스나 메서드는 Spring이 이들을 트랜잭션 경계 내에서 실행되도록 관리하게 해 준다.주요 개념트랜잭션 경계: 트랜잭션의 시작과 끝을 정의한다. 트랜잭션 경계 내에서 수행된..

Back-end/Spring

Spring Annotation

Spring에서 @Annotation은 다양한 기능을 지원하며, 주로 의존성 주입(Dependency Injection)과 관련된 설정을 간결하게 할 수 있도록 도와준다.주요 어노테이션들을 정리해보자면 아래와 같다.@Component: 이 Annotation은 해당 클래스가 Spring 컨테이너의 구성 요소임을 나타낸다. 다른 구체적인 Annotation들(예: @Controller, @Service, @Repository)은 @Component를 확장하며, 각각 특정 계층의 빈(bean)을 정의하는 데 도움을 준다.@Autowired: 이 Annotation은 의존성 주입(Dependency Injection)을 자동화하는 데 사용된다. Spring은 @Autowired가 붙은 필드나 생성자, 메서드 ..

Back-end/Web

redirect / forward

웹 개발에서 redirect와 forward는 서버가 클라이언트에게 페이지 전환을 지시하는 방법을 나타내는 용어이다. 이 두 가지가 각각 어떤 역할을 하고 어떤 상황에서 사용되는지 알아보자.RedirectRedirect는 서버가 클라이언트에게 다른 URL로 이동하라고 지시하는 방법이다. 이 과정은 클라이언트의 브라우저가 두 번의 요청을 보내도록 만든다.특징:HTTP 응답 코드: 주로 302 (임시 이동)이나 301 (영구 이동) HTTP 상태 코드를 사용한다.브라우저 주소 변경: 클라이언트의 브라우저 주소창이 새 URL로 변경된다.새로운 요청: 클라이언트가 새 URL로 새로운 요청을 보내게 되어, 두 개의 서로 다른 HTTP 요청/응답 사이클이 발생한다.URL 노출: 최종적으로 이동한 URL이 클라이언트..

Computer Science/객체 지향 프로그래밍

객체 지향 프로그래밍(Object-Oriented Programming)의 요소

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체의 모임으로 보는 프로그래밍 패러다임이다. 여기서 객체는 데이터와 이를 처리하는 메서드를 포함하고 있는 하나의 단위로 볼 수 있다.이 OOP를 이루기 위해서 가지는 여러 가지 요소가 있으며, 주요 요소들은 다음과 같다.1. 클래스와 객체클래스(Class): 클래스는 객체를 정의하는 틀 또는 설계도라고 할 수 있다. 클래스는 객체의 속성과 행위를 정의한다.객체(Object): 객체는 클래스의 인스턴스(instance)로 설계도인 클래스를 바탕으로 실제 사용할 수 있게 만든 구현체라고 할 수 있다.2. 캡슐화(Encapsulation)캡슐화는 객체의 속성과 메서드를 하나로 묶고, 객체의 내부 상태를 외부에서 직..

프로그래밍 언어/JAVA

예외 처리

예외 처리는 프로그램에서 발생할 수 있는 오류 상황을 처리하는 방법이다.자바의 예외 처리는 주로 try, catch, finally 블록을 사용하여 구현된다. 또한 사용자 정의 예외를 만들어 특정 상황에 맞게 사용할 수도 있다.1. 자바 예외 처리 클래스 계층 구조자바의 예외 처리 클래스는 Throwable 클래스를 루트로 하여 계층 구조를 이룬다.Throwable: 모든 예외의 루트 클래스.Error: 시스템 레벨에서 발생하는 심각한 오류. 애플리케이션 코드에서 처리할 필요가 없음.Exception: 애플리케이션 코드에서 발생하는 예외의 루트 클래스.RuntimeException: 실행 시 발생하는 예외. 주로 프로그래밍 오류(예: NullPointerException, ArrayIndexOutOfBo..

프로그래밍 언어/JAVA

Static / Non-Static method

객체 지향 프로그래밍(OOP)에서 메서드는 static 메서드와 non-static 메서드 크게 두 가지로 나눌 수 있다. 이 두 가지 메서드는 사용되는 방식과 목적이 다른데 이에 대해서 알아보도록 하자.1. Non-Static Method (인스턴스 메서드)정의Non-static 메서드는 클래스의 인스턴스(객체)에 속하는 메서드이다. 이러한 메서드는 특정 객체와 연관되어 있으며, 객체의 상태(인스턴스 변수)를 변경하거나 그 상태를 기반으로 작업을 수행할 수 있다.특징객체 인스턴스 필요: Non-static 메서드를 호출하려면 먼저 해당 클래스의 객체를 생성해야 한다.객체 상태 접근 가능: 이 메서드는 객체의 인스턴스 변수와 다른 인스턴스 메서드에 접근할 수 있다.호출 방식: object.methodNa..

프로그래밍 언어/JAVA

Enum - 1 (feat. final)

Enum이란 특정한 이름이 있는 상수들의 집합을 정의하는 클래스이다.Enum은 주로 코드의 가독성을 높이고, 상수들에 대한 관리를 쉽게 하며, 타입 안전성을 확보하기 위해 사용된다. 상수를 정의하기 위해서 final을 사용할 수도 있는데, Enum을 사용하면 어떤 이점이 있을지 알아보도록 하겠다.final 변수는 인스턴스 변수, 지역 변수, 또는 매개변수로 사용할 수 있으며, 한 번 초기화되면 더 이상 값을 변경할 수 없다.public class FinalExample { public final int instanceVariable; public FinalExample(int value) { this.instanceVariable = value; // 초기화 후 변경 불가 }..

프로그래밍 언어/JAVA

Stream

Java Stream API는 Java 8에서 도입된 기능으로, 컬렉션 데이터의 조작을 보다 간결하고 효율적으로 할 수 있도록 해준다. 스트림은 컬렉션의 요소를 하나씩 처리할 수 있는 연속된 데이터 흐름을 나타내며, 이를 통해 데이터를 필터링, 변환, 집계 등의 작업을 선언형으로 처리할 수 있다.주요 개념과 구성 요소1. 스트림 생성 (Stream Creation)컬렉션, 배열 또는 I/O 채널에서 스트림을 생성할 수 있다. List list = Arrays.asList("a", "b", "c");Stream stream = list.stream();2. 중간 연산 (Intermediate Operations)중간 연산은 스트림을 변환하고 또 다른 스트림을 반환한다. 중간 연산은 게으르게 평가(lazy ..

sngyng
devsy