Java/Java 20

백엔드 유닛 테스트 JUnit5 + Mockito

"테스트가 없는 코드는 신뢰할 수 없다"- Kent Beck - 실무에서 안정적인 백엔드 시스템을 개발하려면 "작동하는 코드"뿐만 아니라 "신뢰할 수 있는 테스트 코드"가 필수입니다. 이번 글에서는 Spring Boot 환경에서 JUnit5와 Mockito를 사용한 유닛 테스트의 모든 것을 실무 코드 예제와 함께 자세히 알아보겠습니다. 유닛 테스트란 무엇인가?유닛(Unit)은 프로그램의 최소 구성 단위로, 일반적으로 하나의 클래스 또는 메서드를 의미합니다. 유닛 테스트(Unit Test)는 이 단위를 독립적으로 검증하는 테스트입니다.핵심 목적: 외부 시스템(데이터베이스, 네트워크, API 등)과 분리된 상태에서 비즈니스 로직의 동작을 빠르게 검증하는 것 유닛 테스트와 통합 테스트의 구분 단일 컴포..

Java/Java 2025.05.16

PreparedStatement 란? 기본개념, 장점, 성능향상, 메서드 활용과 주의사항 등

(구)웹에서 무지성으로 대충 내용만 알고 사용하던 방식을 이번에 정리가 하고 싶어서 작성하게 되었습니다.   PreparedStatement란?PreparedStatement는 자바(Java)의 JDBC(Java Database Connectivity) API에서 제공하는 인터페이스로, 데이터베이스와 상호작용할 때 SQL 쿼리를 안전하고 효율적으로 실행할 수 있게 해주는 도구입니다.  기본 개념PreparedStatement는 일반적인 Statement와 달리, SQL 쿼리를 미리 컴파일하고 실행 시점에 파라미터 값만 바인딩하는 방식으로 동작합니다.  작동 방식 (단계별) SQL 쿼리 준비: 물음표(?)를 사용하여 값이 들어갈 자리를 표시합니다.쿼리 컴파일: 데이터베이스가 쿼리를 미리 분석하고 실행 계획..

Java/Java 2025.04.09

Java 음성 소켓 통신(서버, 클라이언트) 기초

✔ Server import java.io.*; import java.net.*; import javax.sound.sampled.*; public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; try { // 서버 소켓 생성 serverSocket = new ServerSocket(12345); System.out.println("서버가 12345번 포트에서 연결 요청을 기다리고 있습니다..."); // 클라이언트 연결 대기 Socket clientSocket = serverSocket.accept(); System.out.println("클라이언트가 접속..

Java/Java 2023.04.21

JAVA 채팅 프로그램

✔ JAVA 채팅 프로그램 쓰레드 병렬처리 ServerSocket의 accept() 실행하면 해당 작업이 완료되기전까지 블로킹(blocking)이 일어남 쓰레드를 사용하면 블로킹이 일어나는 현상을 해결할 수 있음 DataInputStream - 기본 데이터타입 단위로 데이터를 읽을 수 있음 - byte 단위로 데이터를 읽는 것이 아님 - readUTF() : UTF-8(모든 언어가 사용가능한) 형식으로 코딩된 문자열을 읽을 수 있음 DataOutputStream - 기본 데이터타입 단위로 데이터를 쓸 수 있음 - byte 단위로 데이터를 쓴는 것이 아님 - writeUTF() : UTF-8(모든 언어가 사용가능한) 형식으로 코딩된 문자열을 출력할 수 있음 서버 import java.io.DataInput..

Java/Java 2022.10.20

JAVA (TCP/IP, 서버 클라이언트)

2. TCP/IP 네트워킹 소켓(socket) - 두 호스트 사이 연결 - 어떠한 방식으로 통신을 할지도 정해주는 것 - 원격 장비에 연결, 데이터 전송(보내기, 받기), 포트 지정, 수신 대기(서버와 클라이언트 관계(c/s), p2p) ServerSocket 클래스 - 클라이언트의 연결 요청을 기다리면서 연결 수락을 담당하는 클래스 (대기하다가, 일반소켓을 만들고 일반 소켓끼리 통신할 수 있도록 만들어 연결을 해주는 역할) -> 서버부터 실행을 해야한다.(대기상태에서) Socket 클래스 - 연결된 클라이언트와 통신을 담당하는 클래스(사용자가 접속할 수 있는) 문제. 에코서버를 만들어보자. 데이터 클라이언트 -----> 서버 5 밖으로 보넬 아웃풋 스트림을 통해 나갈거 만들고 -> 버퍼에다 담을거기 떄..

Java/Java 2022.10.20

JAVA 네트워크

1. 네트워크(Network) - Net + work 합성어 - 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용형태 인터넷(Internet) - 컴퓨터로 연결하여 TCP/IP 프로토콜을 이용하여 정보를 주고받는 네트워크 ✔ IP(Internet Protocol) - 인터텟 연결되어 있는 모든 장치를 식별할 수 있도록 장비에게 부여되는 고유 주소 ✔ IPv4 - 8bit씩 4자리 - 하나의 스텟마다 0 ~ 255 (0 ~ 42억9천) 예) 211.100.85.100 - 향후 IPv6, 32bit 내 아입피 확인 - 네이버 "내 ip"로 검색 -> 123.142.55.115 - cmd -> ipconfig -> 192.168.12.12 도메인 -> IP, IP -> 도메인 - cmd -> nsl..

Java/Java 2022.10.20

자바 제네릭(Generic)

1. 제네릭(Generic) 클래스나 메소드에서 사용할 데이터의 타입을 컴파일시에 미리 지정하는 방법 제네릭을 사용하는 이유 - 다양한 타입의 객체의 재사용을 높일 수 있음 - 클래스에서 사용할 타입을 외부에서 사용 - 반복적인 코드, 불필요한 코드를 사용하지 않도록 함 - 강제적인 형변환을 발생시키지 않음 public class Generic1 { public static void main(String[] args) { // Box2 box1 = new Box2(); // Box2 box1 = new Box2(); Box2 box1 = new Box2(); box1.setT("안녕하세요"); System.out.println(box1.getT()); String str = box1.getT();// 형..

Java/Java 2022.10.12

자바 스레드

1. 스레드(Thread) 프로세스 - 윈도우 작업 관리자에서 프로세스 탭에 올라와 있는 어플리케이션 하나 - 운영체제로부터 필요한 메모리를 할당받아 어플리케이션 코드를 실행 멀티 태스킹 - 두가지 이상의 작업을 동시(병렬작업)에 처리하는 것 스레드 - 하나의 프로세스 내부에서 독립적으로 실행되는 작업단위 - 운영채재애 의해 관리되는 하나의 작업 혹은 Task를 의미 - 다중 스레드 작업시에는 각 스레드끼리 정보를 주고 받을 수 있어 처리 과정의 오류를 즐일 수 있음 - 각 프로세스는 서로 정보를 주고 받을 수 없음 - JVM에 의해 하나의 프로세스가 발생, main() 안에 실행문들이 하나의 스레드 멀티 스레드 - 여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법 - 메모리 공유로 인한 시스..

Java/Java 2022.10.07

자바 영어단어장

영어단어장 프로그램을 작성해보자. 1. 지난 단어장을 수정하여 save라는 명령을 입력하면 wordbook.txt 단어를 저장 2. 프로그램을 재시작할 때 wordbook.txt에서 단어를 읽어와 메모리에 저장 public class World {//먼저 변수를 선언한다. private String english; private String korean; private int level; private String wdate; // 변수가 private로 선언되어 있기 때문에 this를 이용하영 받아온 값을 넘겨준다. public World(String english, String korean, int level, String wdate) { this.english = english; this.korea..

Java/Java 2022.10.07

자바 File 다루기

3. 파일 다루기 File 클래스 파일 또는 디렉토리 다루는 클래스 입출력 관한 작업 File 참조변수 = new File(파일 경로 또는 파일이름); ✔ 스트림(Stream) - 자바는 파일이나 콘솔에 입출력을 직접 다루지 않고 스트림이라는 흐름을 통해 다룸 - 운영체제에 의해 생성되는 가상의 연결고리를 의미하고 중간 매개자 역할을 함 Java 프로그램 OS(운영체제) 디스크(파일, 디렉토리) 스트림(흐름) 모니터, 프린터, 네트워크... ✔ 절대경로 믈리적인 경로 예) C:\Java\Day9\Day9.txt ✔ 상대경로 현재 동작하고 있는 파일을 중심으로 상대적인 경로 예) Day9.txt, 디렉토리명/Day9.txt, ../Day9.txt import java.io.File; import java...

Java/Java 2022.10.07

자바 예외처리

2. 예외 처리(Exception) 오류(error) 자바 컴파일러에 의해 문법 오류를 발생 예외(exception) 문법이 맞게 작성되었다 하더라도 프로그램을 실행하면서 예상하지 못한 오류가 발생 프로그램 실행 중 비정상적으로 종료 예측할 수 있는 예외, 예측 못하는 예외 ✔ 예외가 발생하는 원인 - 사용자가 잘못된 데이터를 입력하는 경우 - 개발자가 로직이나 계산을 잘못 작성한 경우 - 하드웨어나 네트워크가 제대로 동작하지 못하는 경우 - 악의적으로 잘못된 연산을 요구하거나 시스템을 공격 예외의 종류 - 예외 상황에 맞춰 문제를 처리하기 위해 다양한 예오처리가 있다. - 컴파일시에 예외 발생 - 런타임시에 예외 발생 [Exception] // 모든 예외를 처리 [IOExcerption] [FileNo..

Java/Java 2022.10.06

국비지원 자바 복습 9(Generic, 컬렉션 프레임워크)

1. 제네릭(Generic) 클래스나 메소드에서 사용할 데이터의 타입을 컴파일시에 미리 지정하는 방법 제네릭을 사용하는 이유 - 다양한 타입의 객체의 재사용을 높일 수 있음 - 클래스에서 사용할 타입을 외부에서 사용 - 반복적인 코드, 불필요한 코드를 사용하지 않도록 함 - 강제적인 형변환을 발생시키지 않음 ✔ Object 클래스 - 자바의 모든 클래스의 최상위 조상 클래스 - 모든 타입은 Object 클래스 객체화 시킬 수 있음 - 기본 데이터 타입을 객체화 시킨 래퍼타입으로 대입 받을 수 있음 2. 컬렉션 프레임워크(Collection Framework) - 여러가지 데이터를 메모리에 쉽고 효과적으로 처리할 수 있도록 제공하는 클래스들릐 집합 - 자료구조를 구현한 클래스들의 모음 @ 자료구조 : - ..

Java/Java 2022.10.06

국비지원 자바 복습 8(래퍼, 추상 클래스, 인터페이스, static)

1. 래퍼 클래스(Wrapper Class) - 포장 - 기본형(primitive type) 변수 데이터를 객체로 취급해야 할 경우 객체로 포장해주는 클래스 - 자바는 객체지향 언어이지만 기본형이라는 예외를 둔 이유는 성능때문 @배열의 단점 1. 배열의 수를 미리 저장해야한다.(최댓값을 넘을 경우 새로 선언하거나 변경해야 하는 단점) 2. 배열의 타입을 상이하게 사용할 수 없다. 3. 인덱스 번호를 모를 경우 주소 값을 처음부터 일일히 대조해야한다는 단점을 가지고 있다. 래퍼 클래스가 필요한 이유 - 기본형 변수는 값을 저장하고, 첨조형 변수는 주소를 저장하기 때문 - 컬렉션 프리임워크(자료구조와 데이터를 처리하는 알고리즘)는 참조형 변수만을 다루기 때문 - 멀티쓰레딩(다수의 스레드를 동시에 이용하는 작..

Java/Java 2022.10.05

국비지원 자바 복습 7 (객체의 배열, Object, 상속, 업/다운 캐스팅)

1. 객체의 배열 클래스 이름 참조변수 = new 클래스이름[요소의 갯수]; int[] arr = new int[3]; arr[0] = 10; ​ // 아직 객체화는 아니고 배열을 만든것일 뿐 Student[] arr = new Student[3]; arr[0] = new Student(); //student 객체를 arr[]에 0번방에 저장하게 된다. arr[0].setNo(1); arr[0].setName("song"); .... ​ arr[1] = new Student();// 주소마다 객체를 다시 선언해줘야 한다. arr[1].setNo(2); arr[1].setName("hun"); .... ​ @ arr[0] = student[0];//잘못된 입력 ​ 2. object 클래스 -java.lan..

Java/Java 2022.10.04

국비지원 자바 복습 6 (메소드, 메인메소드, opp, 클래스)

1. 메소드(method) - 어떤 로직이나 기능을 만들어 내는 방법(함수) - 코드를 재활용 할 수 있도록 하여 경제적으로 코드를 작성할 수 있음 - 객체를 생성하여 참조변수를 통해 호출할 수 있는 함수 ​ 접근제어자 [static] 변환타입 메소드이름([매개변수1, 매개변수2..]) { //매개변수 : 원하는 값을 넣을 수 있다. // 반환타입이 없을 경우 void를 사용한다. 메소드이름이 호출되면 실행할 문장; ... [return 반환값] // 내가 원하는 값을 돌려준다. 메소드 호출한곳으로 // 반환값은 반환타입과 동일하게 사용한다. } ​ // static : 객체를 생성하지 않아도 코드가 실행되면 메모리에 적재된다 public static int sum(int num1, int num2){ ..

Java/Java 2022.10.04

국비지원 자바 복습 5 (2차원 배열, String 클래스, 주민등록 검증)

1. 2차원 배열 값이 행과 열로 구성된 배열 ​ 1차원 데이터타입[] 배열이름 = new 데이터타입[갯수]; int[] arr = new int[5]; arr[0] = 10; //1차원 배열에서 한번에 초기화 및 변수선언 int[] arr = {10, 20, 30}; // new int 생략 가능하다. ​ 2차원 데이터타입[][] 배열이름 = new 데이터타입[행갯수][열갯수];// |(행)-(열) int[][] arr = new int[2][3]; [0,0] [0,1] [0,2]0행 [1,0] [1,1] [1,2]1행 0열 1열 2열 ​ arr[0][0] = 10; arr[0][1] = 20; .. arr[1][2] = 60; ​ // 2차원 배열의 선언 및 초기화 int[][] arr = {{10,..

Java/Java 2022.10.04

국비지원 자바 복습 4 (반복 문, 배열)

1. 반복문 - while문 ​ while(조건식){ 조건식의 결과가 true인 동안 반복할 문장; ... } ​ int num = 10; while(num >= 10){ //밑에서 후위연산 후 올라와서 빠진다. System.out.println("num은 10보다 큽니다."); //무한루프 때문에 중괄호가 필요하다. num--; } (while)문제 1 ~ 100까지의 짝수의 총합을 구하는 프로그램을 작성 - for문 ​ for(변수의 초기화; 조건식; 증감식){ 조건식이 true인 동안 반복할 문장 } ​ for(int i=1; i random은 0.99999까지이기 때문이다. ​ 1 ~ 45의 사이에 랜덤한 값을 추출 double rn = Math.random(); (int)(rn * 45) + 1..

Java/Java 2022.10.04

국비지원 자바 3(타입변환, 제어 문, 성적프로그램)

1. 타입 변환 - 연산은 기본적으로 같은 타입의 피연산자와 수행 - 서로 다른 타입의 피연산자가 있을경우 두 피연산자 중 크기다 큰 타입으로 자동변환 EX) 10 / 3.0 = 3.3333... 실수형이 정수형보다 크기(소수)가 크기 때문이다. 정수 byte, (byte)변수명 ​ ​ ✔ Scanner 클래스 -> 조건/제어문 들어가기 전에 미리 알아보자 - 자바에서 여러가지 데이터를 입력받을 수 있도록 도와주는 대표적인 입력관련 클래스 - java.util 패키지(폴더별로 나누어 둔것이라고 생각하자)에 존재 ​ 변수 -> Stack에 저장 데이터타입 변수이름 = 값; int num = 10; 객체 -> new가 나오면 ..

Java/Java 2022.10.04

Java 1 (기초, 변수, 연산자,)

1. JVM(자바 가상 머신) - 여러 운영체제에서 동일한 실행 결과가 나오도록 설계 소스코드 -> 컴파일러 -> Byte code -> 실행 // source(코드), out(결과) ​ //sout; 출력메소드 ​ //메인메소드 : 시작하는 시작점 프로그램에서 메인 메소든는 1개만 존재 ​ // 별도의 프로그램이라고 생각하면 메인 메소드도 여러개 존재할 수 있다. ​ ​ 2. 자바의 소스코드 ​ - 파일명과 class명은 동일해야 함 ​ - 대소문자가 명확히 구별해야 함 ​ - 문장의 끝은 ;(세미콜론)을 붙여야 함 ​ ​ 3. 문장의 출력 ​ - System.out.println() : 한 줄에 값을 출력한 후, \n을 붙이지 않아도 알아서 줄 바꿈이 됨 ​ - System.out.print() : ..

Java/Java 2022.10.03

Java 국비지원 OT

2022. 9. 22 - 국비지원 Day1 ​ # 학습 순서 및 프로젝트 계획 ​ * 웹 개발 - 문법 정도로 학습 Java -> 내부요소 (로그인, 로그아웃 등) HTML/CSS/JavaScript (user interface) -> 화면구성 JSP(최근 사용X)/Spring(자바 웹 개발간 편리하고 강하게 사용) -> (Server) ----------------------------------------------------------------- 프로젝트 1차실시 ​ * AI Python - 자바로도 AI를 다룰 수 있지만 가장 대중적으로 쓰이는 언어가 Python이다. ----------------------------------------------------------------- 프로젝트 ..

Java/Java 2022.10.02
반응형