전체 글

개발 관련 지식

[Linux 명령어] 기초 명령어

이번에 42Gyeongsan의 La Piscine에 참여하게 되면서 Linux 환경의 터미널에서 작업할 기회가 생겼다. 서버는 Linux 기반의 환경에서 최적화되어 동작하는 경우가 많기 때문에 백엔드 개발자로서 알아두면 좋은 지식이라고 생각해서 알게 된 것들을 정리해보고자 한다. pwd: print working directory의 약자로 현재 위치한 디렉토리를 보여준다.cd: change directory의 약자로 현재 위치한 디렉토리에서 어딘가로 이동할 때 사용한다. 그냥 cd만 쓰면 홈 디렉토리로 이동하고 cd 뒤에 현재 위치한 디렉토리 안의 디렉토리를 입력하면 해당 디렉토리로 이동할 수 있다.cd .. 을 하면 상위 디렉토리로 이동이 가능하다.ls: list의 약자로 현재 위치한 디렉토리의 내부 ..

Computer Science/운영체제

5. 프로세스 동기화

1-1. 프로세스 간 통신의 개념프로세스 간 통신의 종류공유 메모리나 공유 파일을 이용한 통신일정한 메모리 영역이나 파일을 공유하고 이를 통해 데이터를 주고받음가장 원시적파이프를 이용한 통신파이프는 프로세스 간 통신을 위해 OS가 제공하는 통신 기법fork()로 만들어진 부모-자식 간에 사용됨소켓을 이용한 통신소켓은 네트워크로 연결된 컴퓨터에서 데이터를 주고받기 위한 통신 기법초기화할 내용도 많고 시스템 자원도 많이 사용하므로 같은 컴퓨터에서 소켓 통신을 하는 것은 비효율적1-2. 프로세스 간 통신의 종류파일을 이용한 통신파일 열기open(”com.txt”, O_RDWR): com.txt 파일을 읽기, 쓰기가 가능한 상태로 준비, open 함수는 파일에 접근할 수 있는 권한인 파일 기술자 fd를 사용자에..

프로젝트 회고

[번개 모임 프로젝트 회고] Spring Data JPA에서 좌표 사용하고 DB에 저장하기

번개 모임 프로젝트를 진행하던 중, 사용자 주위의 모임을 보여주는 기능을 개발해야 했다.모임을 등록할 때, 모임의 장소를 선택해야 하기 때문에 해당 장소의 좌표값을 저장하고 사용자의 위치 좌표값을 기준으로 특정 반경 내에 있는 모임들을 보여주는 것을 목표로 했다. 먼저, 좌표값을 DB에 어떻게 저장해야 할 지 고민했다. 각각 경도와 위도를 저장할 수도 있고 MySQL에서는 POINT 데이터 타입으로 저장하는 방법이 있었다.POINT는 위도와 경도를 하나의 점으로하는 공간 데이터를 저장하는 타입이다.Point를 사용하면 점과 점 사이의 거리를 계산하는 공간 함수를 사용할 수 있다고 하여서 해당 타입을 사용하기로 결정했다.Spring Data JPA에서 지리적 데이터를 사용하기 위해서 Hibernate Sp..

프로그래밍 언어/JAVA

상속과 다형성

상속과 다형성은 객체 지향 프로그래밍의 핵심 개념들이다. 다른 객체 지향 프로그래밍의 요소들에는 어떤 것이 있는지에 대한 설명은 여기서 확인할 수 있다.이 글에서는 상속과 다형성을 중점적으로 설명해 보겠다.1. 상속(Inheritance)상속은 아래처럼 Animal이라는 큰 부모 클래스의 속성과 메서드를 물려받아 재사용하고 확장할 수 있게 해 준다.이 상속을 자식 클래스가 되는 클래스에서 extends를 이용해 선언할 수 있다.이때, 부모 클래스의 public, protected는 속성과 메서드는 상속되지만 private은 상속되지 않는다.// 부모 클래스class Animal { void eat() { System.out.println("This animal eats food."); ..

Back-end/Spring

Spring에서의 예외 처리

스프링에서는 예외 처리를 더 편리하게 하기 위해 다양한 방법을 제공하는데, 일반적으로 @ExceptionHandler와 @ControllerAdvice를 사용한 예외 처리 방법을 많이 사용한다.1. @ExceptionHandler특정 컨트롤러 내에서 발생하는 예외를 컨트롤러 내에서 처리할 수 있다.@Controllerpublic class ExampleController { @RequestMapping("/divide") public String divide(@RequestParam int a, @RequestParam int b) { int result = a / b; // 예외 발생 가능 return "Result: " + result; } @Except..

프로그래밍 언어/JAVA

Enum - 2

Enum - 1에서는 Enum과 final을 비교했을 때 아래의 장점이 있다는 것을 알아보았다.코드의 가독성 상승상수들에 대한 관리 용이타입 안전성 제공Enum의 내장 메서드 활용필드나 메서드를 추가해 복잡한 로직 구현 가능이번에는 Enum의 특징과 사용법 등에 대해서 자세히 알아보도록 하겠다.Enum은 기본적으로 아래와 같이 사용된다.public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY}Day today = Day.MONDAY;switch (today) { case MONDAY: System.out.println("Today is Monday!"); break; case ..

프로젝트 회고

[번개 모임 프로젝트 회고] 프로젝트 구조 설정, Git을 통한 버전 관리

1. 프로젝트 구성이번 프로젝트는 Spring boot를 사용하고 JPA를 적용했기 때문에 위와 같이 폴더를 구성해 보았다.아래는 Notion 페이지를 통해 공유한 프로젝트 구조와 설명들을 작성한 내용이다.Controller해당 요청 url에 따라 적절한 view와 mapping을 처리한다.@Autowired Service를 통해 service의 method를 이용한다. (사용자의 입력을 받고 서비스로 전달하는 역할)적절한 DTO를 담아서 Client에게 전달한다.Service비즈니스 로직을 수행 ( ex 중복 아이디가 있는지 없는지를 검사하기 위한 일련의 과정들)어떻게 데이터가 생성, 저장, 수정, 삭제, 조회 등 되는 지를 정의한 것DAO로 DB에 접근하고 DTO로 데이터를 전달받은 다음, 비즈니스 ..

프로젝트 회고

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

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이 이들을 트랜잭션 경계 내에서 실행되도록 관리하게 해 준다.주요 개념트랜잭션 경계: 트랜잭션의 시작과 끝을 정의한다. 트랜잭션 경계 내에서 수행된..

sngyng
devsy