SpringBoot
🍃 SpringBoot

JPA | DAO 설계

DAO 설계DAO(Data Access Object)는 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체입니다. 비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능은 DAO 객체가 수행합니다. 다만 스프링 데이터JPA에서 DAO의 개념은 리포지토리가 대체하고 있습니다. 규모가 작은 서비스에서는 DAO를 별도로 설계하지 않고 바로 서비스 레이어에서 데이터베이스에 접근해서 구현하기도 하지만, 이번 장에서는 DAO를 서비스 레이어와 리포지토리의 중간 계층을 구성하는 역할로 사용할 예정입니다. 이 포스팅에서는 간단한 데이터베이스 호출만 다루고 있기 때문에 큰 의미는 없지만 실제로 업무에 필요한 비즈니스 로직을 개발하다 보면 데이터를 다루는 중간계층을 두는것이 유지보수측면에서 용이한 경우가 많습니다. 물론..

🍃 SpringBoot

JPA | 리포지토리 인터페이스 설계

리포지토리 인터페이스 설계Spring Data JPA는 JpaRepository를 기반으로 더욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공합니다. 스프링 부트로 JpaRepository를 상속하는 인터페이스를 생성하면 기존의 다양한 메서드를 손쉽게 활용할 수 있습니다. 리포지토리 인터페이스 생성여기서 이야기하는 리포지토리(Repository)는 Spring Data JPA가 제공하는 인터페이스입니다. 엔티티를 데이터베이스의 테이블과 구조를 생성하는 데 사용했다면, 리포지토리는 엔티티가 생성한 데이터베이스에 접근하는 데 사용됩니다. 리포지토리를 생성하기 위해서는 접근하려는 테이블과 매핑되는 엔티티에 대한 인터페이스를 생성하고, 아래 예제와 같이 JpaRepository를 상속받으면 됩니다.publ..

🍃 SpringBoot

@GeneratedValue(strategy = GenerationType.IDENTITY) 전략 제대로 이해하기

엔티티의 기본 키를 자동으로 생성하는 방법 중 하나로 자주 사용되는 GenerationType.IDENTITY 전략에 대해 살펴보겠습니다. 이 전략은 간단하지만, 정확히 이해하지 못하면 예상치 못한 동작이나 성능 문제를 겪을 수 있습니다.IDENTITY 전략이란?@GeneratedValue(strategy = GenerationType.IDENTITY)는 기본 키 생성을 데이터베이스에 위임하는 방식입니다.이는 주로 MySQL, PostgreSQL, SQL Server와 같이 AUTO_INCREMENT 기능을 지원하는 데이터베이스에서 사용됩니다.작동 방식엔티티 매니저는 기본 키 값 생성을 데이터베이스에 맡깁니다.데이터베이스는 INSERT SQL 실행 시 AUTO_INCREMENT를 통해 기본 키 값을 자동..

포트폴리오
✍🏻 기록

식권관리 키오스크 만들기(1) - 웹페이지 제작

https://jwinjection.tistory.com/5 주차감면 키오스크(PyQT,Selenium)| 주차감면 키오스크내가 오자 마자 맡았던 업무 주차권 교부처음에는 주차권에 도장찍어서 교부하는 방식이었는데 그런데 몇달 지나서야주차권 없어지고  사이트를 하나 만들어서 온라인jwinjection.tistory.com사회복무요원 당시 주차감면 키오스크에 이어...| 식권관리시스템우리회사는 식권을 수기로 관리한다... 했다식권관리사이트를 하나 만들어야겠다 생각이 들었다.스프링 부트로 웹을 만들어 아이패드에서 접속했다.골때리는게 아이패드미니 1세대는 JS가 es5 까지밖에 안돼서 api요청시 xhr을 사용해야했다.이번에 회사에서 준 2025년 다이어리의 포장박스와 2024년도 국민은행 달력을 좀 곁들여서 ..

🐍 Python

주차감면 키오스크(PyQT,Selenium)

| 주차감면 키오스크내가 오자 마자 맡았던 업무 주차권 교부처음에는 주차권에 도장찍어서 교부하는 방식이었는데 그런데 몇달 지나서야주차권 없어지고  사이트를 하나 만들어서 온라인으로 할수있게 바꾼다고 했다좀 편해지는건가 싶었다.하지만옆자리 다른 공익형이 맘에 안드셨던 담당자는 나랑 그형의 업무를 바꾸셨고  나는 그렇게 등기를 맡게 됐다 그런데 종종 그형은 병가를 아끼지 말아야 한다며 연가 병가를 자주 쓰셨고 안오는날 마다 나 혼자 주차감면도 하고 등기 접수도 받고 바쁜날이 많았다. 온라인으로 시스템이 바꼈다지만 도장찍는 게 그냥 컴퓨터로 옮겨간 느낌이다 사람이 오면 내가 직접 주차관리서버에 들어가 감면신청을 눌러줘야했기때문이다 그리고 주차감면을 받으로 오는 사람들에 대한 코로나 감염위험도 있었기에 직접 키..

🐍 Python

우편업무 자동화(Excel Visual Basic, pyautogui)

내가 복무중인 곳에서 이전 까지의 사회복무요원들은 일일이 수작업으로 업무를 해왔다 나는 이게 너무 시간이 아깝다는 생각이 들었다. 이 프로그램을 통해 매일 아침 데이터를 불러와서 엑셀로 열기를 누르고 이렇게 원본폴더에 저장하고 저 엑셀에 각각의 열을 하나하나 복사해서 이 양식에다가 하나씩 붙여놓고 수령대장이라는 폴더에 오늘날짜로 이름변경해서 저장한 후 수취인명에 있는 이름을 교직원한글파일에서 검색해 학과명을 찾아내서 해당 학과명으로 변경하고 확인이 끝난 행은 저렇게 ㅇ 동그라미를 넣어준후 학과를 그룹으로 노란색 그룹서식을 일일이 넣어주고 복사해주면 끝이다 등기가 2~30개면 할만했는데 입시기간이나 자격증신청기간 뭐 별별 이유로 100~200개가 들어온다..... 점심까지는 그냥 등기만 하다가 끝난다 이당..

🐍 Python

[pytube] 유튜브영상을 mp3파일로 다운로드

1. 멜론어플과 작별인사를 한다 2. 원하는 노래를 재생목록에 저장한다 재생목록 없으면 새로하나 만든다. 3. 내 채널 - 재생목록에 들어간다 4. 재생목록의 제목을 눌러서 재생목록 페이지로 들어간다 5.이게 재생목목록 페이지이다 6.재생목록페이지의 링크를 복사한다 링크형식은 https://www.youtube.com/playlist?list=playlist?list=샬라샬라샬라샬라 이런식으로 되어있다 복사한후 파이썬을 켜주자 7.pip install pytube 로 pytube라이브러리를 설치한다 pip install pyautogui pip install moviepy 등등 필요한거 설치해준다 8. Playlist안에 복사했던 재생목록링크를 넣고 DOWNLOAD\_FOLDER 에는 노래를 저장할 폴더..

🐍 Python

웹캠을 이용한 바코드리더기

지금까지 등기번호 뒤에 4자리 혹은 6자리로 검색해서 체크를 했는데 이게 등기가 많을때에는 다른 등기번호의 중간부분과 겹치는 경우도 있어서 찾기를 여러번 눌러야 제대로 찾는 경우가 있었다 그리고 무엇보다 등기번호보고 숫자 키보드로 검색하는게 은근 귀찮고 비효율적이다 마침 안쓰는 웹캠이 생겨서 모든 등기우편에는 등기번호바코드가 존재한다! 그래서 웹캠을 바코드리더기로 사용하면 매우 편할것같았다 playsound는 에러가 계속떠서 그냥 winsound 이용했다 그리고 웹캠이 연결되어있지 않으면 실행이 되지 않는다 import cv2 import pyzbar.pyzbar as pyzbar import clipboard import pyautogui import winsound as ws #from playsou..

최신 글
🔥 JAVA

Java | 대표적인 다형성 메드

📌 자바에서 대표적인 다형성(Polymorphism) 메서드자바에서 다형성(Polymorphism) 이란, 하나의 메서드가 여러 가지 형태로 동작할 수 있도록 하는 개념입니다.다형성은 메서드 오버로딩(Method Overloading)과 메서드 오버라이딩(Method Overriding) 을 통해 구현됩니다.✅ 1. toString() 메서드 (오버라이딩)toString() 메서드는 Object 클래스에서 제공하는 메서드로, 모든 객체에서 사용할 수 있습니다.보통 객체 정보를 문자열로 변환할 때 오버라이딩하여 사용됩니다.📌 toString() 예제class Animal { @Override public String toString() { return "이것은 동물 객체입니다."..

🔥 JAVA

Java | 스레드 순차적으로 실행하는 법

✅ 자바에서 여러 개의 스레드를 순차적으로 실행하는 방법자바에서 여러 개의 스레드를 순차적으로 실행할 수 있는 방법은 여러 가지가 있습니다.자바의 기본 스레드 모델은 병렬 실행(Concurrent Execution) 을 목적으로 하지만,적절한 동기화(Synchronization) 기법을 사용하면 순차 실행(Sequential Execution) 이 가능합니다.🚀 1. join()을 사용하여 순차 실행스레드의 join() 메서드를 사용하면 앞선 스레드가 끝날 때까지 기다린 후 다음 스레드를 실행할 수 있습니다.📌 예제: join()을 이용한 순차 실행class MyThread extends Thread { private final String name; public MyThread(Strin..

🛜 네트워크

웹 소켓이란?

🌐 웹소켓(WebSocket) 이란?WebSocket은 서버와 클라이언트가 지속적으로 양방향 통신(Full-Duplex)을 할 수 있는 프로토콜입니다.기존의 HTTP 기반 통신 방식과 달리, 한 번 연결을 맺으면 지속적으로 데이터를 주고받을 수 있는 방식이 특징입니다.🚀 1. 왜 웹소켓이 필요할까?기존 HTTP 방식에서는 요청(Request) → 응답(Response) 구조를 사용하여 클라이언트가 요청해야만 서버가 응답할 수 있습니다.하지만 실시간 데이터 교환(예: 채팅, 게임, 주식 시세, IoT, 라이브 스트리밍)이 필요한 경우에는 HTTP 방식으로 처리하기 어렵습니다.❌ 기존 HTTP 방식의 문제점Polling (폴링)일정 간격마다 서버에 요청을 보내는 방식 (ex: 1초마다 GET 요청)불필요..

🛜 네트워크

TCP 3-Way Handshake vs 4-Way Handshake 차이점

✅ TCP 3-Way Handshake vs 4-Way Handshake 차이점TCP(Transmission Control Protocol)에서는 연결을 설정할 때 3-Way Handshake(3방향 핸드셰이크),연결을 해제할 때 4-Way Handshake(4방향 핸드셰이크) 방식을 사용합니다.🚀 1. TCP 3-Way Handshake (연결 설정 과정)"서버와 클라이언트가 서로 연결을 설정하는 과정"클라이언트와 서버가 신뢰할 수 있는 데이터 전송을 위해 세 번의 패킷 교환을 수행합니다.📌 3-Way Handshake 과정1️⃣ SYN (Synchronization 요청)클라이언트가 서버에게 연결 요청을 보냄.SYN 플래그가 설정된 패킷 전송2️⃣ SYN-ACK (Synchronization + ..

🛜 네트워크

TCP vs UDP 차이점

🌐 TCP vs UDP 차이점TCP(Transmission Control Protocol)과 UDP(User Datagram Protocol)는 모두 전송 계층(Transport Layer, OSI 4계층)에서 사용되는 프로토콜입니다.하지만 두 프로토콜은 신뢰성(Reliability), 속도(Speed), 데이터 전송 방식에서 큰 차이가 있습니다.🚀 1. TCP(Transmission Control Protocol)란?"신뢰성을 보장하는 연결형 프로토콜"TCP는 데이터를 정확하고 순서대로 전달하기 위한 프로토콜입니다.즉, 데이터가 유실되지 않고, 순서가 보장되는 것이 중요할 때 사용됩니다.✅ TCP의 주요 특징✔ 신뢰성 보장 → 데이터가 손실되거나 순서가 어긋나면 재전송 요청 (에러 감지 및 복구)✔..

이재원
깃든블로그