Backend Developer Tech Blog

Hello! 🖐

✏ ROOKIE 백엔드 개발자 성장 일기


공부한 것을 정리하고 공유하는 기술 블로그입니다.

내용이 부족하거나 잘못된 부분이 있을 수 있으니 너른 양해 부탁드립니다.

Contact

✉ email : happyhsryu@gmail.com

HOT
Spring Security

[Spring] 카카오 로그인 API 사용 방법

Kakao Developers 이미지 설명에 각 이미지 내용에 대한 위치(경로) 적어뒀으니 참고해 주세요. 1. KakaoDevelopers 접속 https://developers.kakao.com/ Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 2. 애플리케이션 추가하기 3. 애플리케이션 추가 4.Rest API 키 확인 5. Web 플랫폼 등록 6. 사이트 도메인 설정 7. 카카오 로그인 활성화, Redirect URI 등록 8. 동의 항목 설정 사용하려는 개인 정보 동의 설정 ( email, nickname 정보 ) 9. (추가) 카카오 ..

DevOps

[Spring / S3] SpringBoot 프로젝트 - S3 이미지 업로드

이전 글에서 S3 bucket과 IAM을 생성하고 SpringBoot project에서 S3 접근에 사용할 accessKey와 secretKey를 얻는 것까지 다뤘다. 2024.01.21 - [DevOps] - [AWS/S3] Spring boot project 이미지 업로드를 위해 S3 버켓 만들기 [AWS/S3] Spring boot project 이미지 업로드를 위해 S3 버켓 만들기 Amazon S3 버킷 만들기 IAM 만들기 생성 완료 IAM accessKey, secretKey 얻기 IAM - 사용자 - 보안 자격 증명 액세스 키 만들기 CLI 선택 accessKey, secretKey 저장 저 두 가지 Key를 저장해 뒀다가 spring properties에 등 innovation123.ti..

데이터 접근 기술

[MyBatis] 마이바티스 기본 사용법

MyBatis란? MyBatis는 JdbcTemplate이 제공하는 대부분의 기능을 제공한다. 그러나 JdbcTemplate의 문제점 중 하나인 여러 줄의 String 형 sql을 작성해야 한다는 점을 MyBatis를 이용하여 해결할 수 있다. MyBatis는 SQL을 xml에 편리하게 작성할 수 있고, xml 내에서 동적 쿼리를 매우 편리하게 작성할 수 있다. JdbcTemplate은 스프링에 내장된 기능이고, 별도의 설정 없이 사용할 수 있지만, MyBatis는 약간의 설정이 필요하다. 따라서 동적쿼리와 복잡한 쿼리를 많이 사용하는 경우에는 MyBatis를 사용하고, 단순한 쿼리들이 많다면 JdbcTemplate을 사용하는 것이 좋을 것이다. 사용 설정 build.gradle에 MyBatis 의존관계..

Spring Boot

[Spring] 세션, 쿠키, @SessionAttribute 로그인 확인

쿠키 로그인 기능이 있는 서비스를 개발하다 보면, 로그인 시 이용할 수 있는 페이지와 그렇지 않은 페이지가 있다. 같은 화면도 로그인 이용자에게 보여줄 화면과 비로그인 이용자에게 보여줄 화면을 다르게 설정해야 할 때도 있다. 이때, 쿠키를 사용해서 로그인 정보를 관리할 수 있다. 서버에서 클라이언트로 loginId가 담긴 쿠키를 전달하고, 클라이언트에서는 그 쿠키를 저장해 뒀다가 HTTP 요청 시 서버로 전달한다. //Cookie 생성자 Cookie idCookie = new Cookie( String name, String value ) //HTTP 응답에 쿠키 담기 response.addCookie( idCookie ); //쿠키 삭제하는 법 idCookie.setMaxAge(0); //..

SQL

[SQL/MariaDB] 데이터 추가, 수정, 삭제 (INSERT, UPDATE, DELETE)

INSERT INTO : 데이터 추가 id, name, loginId, password의 attribute를 갖고 있는 MEMBER table에 데이터를 추가하는 예제이다. TABLE에 존재하는 여러가지 constraints들에 맞게 데이터를 삽입해야한다. 방법 1 : 모든 속성 선택 table에 존재하는 attribute의 순서대로 값을 넣어줘야 한다. table에 존재하는 모든 attribute에 값을 넣어줘야 한다. (null이라도 넣어야함) insert into member values(3, 'Lee', 'Lee1', 'pwLee'); 방법 2 : column 지정 아래 방식을 사용하면, attribute 순서를 맞추지 않아도 된다. (순서를 지정해준다.) 이 방법을 사용하면 모든 attribut..

Projects

[Java/Spring]초보 백엔드 개발자 게시판 프로젝트 - 명세서 만들어보기

BoardService Github https://github.com/HSRyuuu/my_first_board 1. 개요 프로젝트 명 : Board Service 개발 인원 : 1명 개발기간 : 2023.04.11 ~ 2023.05.15 주요 기능 : 기본적인 게시판의 기능 (아래에서 추가로 설명) 사용 기술 : Java, SpringBoot, gradle, thymeleaf, MyBatis (아래에서 추가로 설명) 데이터베이스 : H2 Database 2. skills🔨 Java 11 SpringBoot 2.7.10 gradle Thymeleaf MyBatis H2 Database HTML5, CSS3, BootStrap 기타 사용 기술 필터(Spring Interceptor) 세션 쿠키를 이용하여 로..

Spring Boot

[Spring Boot] @PathVariable과 @RequestParam - 파라미터 받기

@PathVariable 경로변수 PathVariable을 사용하면 리소스 경로에 식별자를 넣어서 동적으로 URL에 정보를 담을 수 있다. URL 경로의 중괄호 { } 안쪽에 변수를 담고, 그 변수를 @PathVariable(" ")로 받아서 사용할 수 있다. 1. 기본 URL의{postId}와 매개변수 long orderId와 이름을 맞춰준다. @GetMapping ("/order/{orderId}") public String getOrder(@PathVariable String orderId){ log.info("orderId : {}", orderId); return "orderId:"+ orderId; } 요청 : http://localhost:8080/order/123 응답 : orderId:1..

데이터 접근 기술

[Jdbc] JdbcTemplate 사용법 및 적용예제

JdbcTemplate이란? JdbcTemplate은 SQL을 직접 사용하여 JDBC를 다루는 편리한 방법 중 하나이다. JdbcTemplate은 JDBC를 직접 사용할 때 발생하던 여러 가지 반복 문제를 해결해 주고, 트랜잭션을 위한 커넥션 동기화와 스프링 예외 변환기 등의 기능을 자동으로 실행해 준다. 장점 JdbcTemplate은 스프링으로 JDBC를 사용할 때 자동으로 포함되는 spring-jdbc 라이브러리에 속해있기 때문에 별도의 복잡한 설정 없이 사용할 수 있다. 템플릿 콜백 패턴을 사용해서 JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해 준다. 개발자는 SQL을 작성하고 전달할 파라미터를 정의하여 응답 값을 매핑하기만 하면 된다. 트랜잭션을 위한 커넥션 동기화, 스프링..

Database

[Redis] Redisson 분산 락을 간단하게 적용해보기

문제 상황 어떤 데이터에 대해 매우 빠르게 수정이 일어날 때 동시성 문제가 발생할 수 있다. 예를 들어 A라는 데이터를 수정하는 로직이 0.1초 소요되는데, 0.001초 간격으로 A라는 데이터를 수정하는 요청이 여러 번 들어왔을 때 값이 제대로 수정되지 않을 수 있다. 이럴 때, DB 데이터 수정의 순차적 처리를 보장하기 위한 방법으로 Lock이 있다. Lock 트랜잭션 락과 비슷한 개념으로 어떤 데이터 수정, 접근 등에 Lock을 필요로 하게 설정하는 것이다. 데이터를 수정하려면 우선 Lock을 획득하고 수정 후에 Lock을 반납한다. 만약 Lock을 획득할 수 없는 상황에서는 Lock을 획득할 수 있을 때까지 대기하거나 수정을 취소할 수 있다. 분산 락(Distributed Lock) 하나의 공유 자..

끄적끄적...

[부트캠프] 제로베이스 백엔드 취업 스쿨 수강 후기 / 회고

어쩌다 개발을 시작했지? 개발과는 별로 관련 없는 공대를 나온 나는 대학교 4학년 때 우연히 Java 프로그래밍 강의를 듣고 큰 흥미를 느꼈다. 최종 과제로 학생 인원 관리? 프로그램을 Java 코드만을 이용해서 만들어봤던 기억이 있다. 학기가 마무리되고 이 과제 프로그램을 객체지향 개념을 적용해서 리팩터링 해보며 백엔드 개발자가 되고 싶다는 생각을 했고, 해당 학기가 마무리되고 본격적으로 공부를 시작했다. 요즘 공대는 기본적으로 프로그래밍을 배워서 위의 기본 과정만 공부해 봤다. (1학년때 C언어와 C++를 배워보고 5년 만에 Java 프로그래밍을 들었어서 거의 처음 배우는 기분이었다.) 왜 백엔드 개발자? 일단 개발자가 되고 싶긴 했는데 무슨 개발을 하고 싶은가에 대한 고민을 하는 시간이 있었던 것 ..

LATEST
JPA

[JPA / Spring] JPQL을 이용해서 Entity가 아닌 DTO를 반환하는 방법

예제 소스코드(Google Drive)https://drive.google.com/file/d/1YrsS9-sjHM4QSLhe-5GZsvcfVlvMI_Z9/view?usp=sharingapplication.property 파일 수정해서 DB 연결해서 테스트해 보실 수 있습니다. (소스코드에서는 xxx처리) JPQL을 이용해서 DTO를 반환??? JPA를 이용하는 경우, 특정 상황에서 Entity 전체가 아닌 일부 컬럼만을 가져오고 싶을 때, @Query 어노테이션 내에 작성하는 JPQL에서 Java 객체를 생성하는 코드를 추가하는 방법을 사용할 수 있다. Spring-data-jpa가 제공하는 JpaRepository 인터페이스를 이용할 것이고, 회원과 주문으로 구성된 간단한 예제이다.회원(MemberE..

운영체제

[CS / 운영체제] 컴퓨터 부팅(Booting) 과정

부팅(Booting)이란?컴퓨터를 켜서 동작시키는 절차.처음 컴퓨터를 켜면 메모리에는 아무것도 올라와 있지 않다. 컴퓨터가 동작하게 하기 위해 운영체제 커널을 특정 주소의 물리 메모리로 올려서 실행되도록 하는 절차를 말한다.부팅 과정컴퓨터에 전원을 공급ROM에서 BIOS 프로그램을 RAM에 올린다. (1)BIOS는 POST(Power-On Self Test) 실행 BIOS는 Boot Loader를 RAM에 올린다. (2)Boot Loader는 Boot 프로그램을 RAM에 올리고 실행한다. (3) (이제 Boot 프로그램이 Memory에 올라가 있는 상태이다.)Boot 프로그램은 운영체제 커널 이미지를 RAM에 올리고 실행한다.(4)부팅 과정 종료 ROM(Read-Only Memory)과 RAM(Rando..

SQL

[SQL / Database / SQLD] 함수모음_문자, 숫자, 날짜 (Part2 - Ch01)

예제에 쓰이는 'DUAL'테이블은 SQL 쿼리를 작성할 때 특정 데이터를 검색할 필요 없이, 오로지 표현식의 값을 계산하거나 데이터베이스 함수를 실행하기 위해 사용하는 가상 테이블이라고 합니다.하나의 더미 행만을 포함하고 있어서, 테스트 목적이나, DB에서 직접 계산식을 수행해야 할 때 사용한다고 합니다.  문자 관련 함수CHARACTER(ASCII 코드) : 아스키코드 -> 문자 변환select CHARACTER(65) from dual;LOWER / UPPER : 대/소문자 변환select LOWER('Hello'), UPPER('Hello') from DUAL; TRIM : 공백 제거LTRIM : 왼쪽 공백 제거select LTRIM(' Hello') from DUAL;RTRIM(문자열) : 오..

Database

[Database / SQLD] 데이터 모델과 SQL _ 정규화, 반정규화, 트랜잭션 (Part1 - Ch02)

SQLD를 준비하며 개인적으로 조금 외워두면 좋을 것 같은 것들만 적어보았습니다.참고한 책은 "2024 유선배 SQL개발자(SQLD) 과외노트"입니다.01 정규화(Normalization)정규화란?

Linux 리눅스

[Linux/Unix] POSIX와 Unix 계열의 표준 입출력

이전 글...[Linux/Unix] POSIX란? (포직스, 이식 가능 운영체제 인터페이스, Unix 표준) 표준 스트림표준 스트림(Standard Stream)은 Posix 표준을 따르는 OS의 표준 입출력 통로를 말한다.Unix 계열 운영체제에서 컴퓨터 프로그램과 여러 입출력 장치 간에 통로(Stream) 스트림은 프로그램을 드나드는 데이터를 바이트의 흐름(byte stream)으로 표현된 것이다. Unix 기반 운영체제에서는 이 스트림을 이용해서 각 장치를 파일처럼 다루고, 모든 파일과 데이터를 표준 입력과 표준 출력으로 나타내며 이들 사이의 상호작용을 pipe를 통해 조합, 연결하여 사용한다. 즉, 표준 입출력 + pipe로 모든 동작을 정의한다.표준 입력(stdin) / 표..

HSRyuuu
HS_dev_log