목록웹 개발/Back-end (15)
개발 기록이

1. AES 알고리즘대칭키 암호화 방식으로 암호화와 복호화에 동일한 키를 사용한다. 이 키는 비밀로 유지되어야 하며 암호화된 데이터는 키를 알고 있는 사람만 복호화할 수 있다. AES 알고리즘 중 AES-256을 사용하여 256비트(32바이트) 키로 더 강력한 보안 방법을 적용해보려고 한다. 2. 암복호화하기import java.util.Base64;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;public class CipherExample { public static void main(String[] args) throws Exception { // AES-256을 사용하려면 키 길이가 32바이트(256비트)여야 함. Stri..

1. public vs private public: 누구나(어디서든) 접근 가능private: private이 선언된 메서드나 변수가 속한 클래스 안에서만 접근 가능public class PrivateTest { public static void main(String[] args) { Cafe cafe = new Cafe(); cafe.orderCoffee(); // 커피 주문하기(호출 가능) // cafe.makeCoffee(); // private라서 호출 불가 } public static class Cafe { private void makeCoffee() { // 카페 관계자만 사용 가능(커피 만들기) Sy..

여러 사람에게 메일 발송을 하는 것처럼 반복적인 작업을 동기 방식으로 처리하면, 각 작업이 완료될 때까지 블로킹이 발생하여 전체 처리 시간이 늘어날 수 있다. ExecutorService를 활용한 비동기 처리에 대해 알아보자. 병렬 작업과 스레드풀병렬 작업(여러 작업을 동시에 처리) 증가 → 스레드 개수 증가 → CPU, 메모리 사용량↑ → 성능 저하병렬 작업 시 스레드풀을 사용하여 스레드 수 제어가 필요하다. 스레드풀(ThreadPool)의 동작제한된 개수의 스레드를 사용하여, 작업이 끝난 후에는 해당 스레드를 재사용하여 성능 저하를 막아준다. 자바에서 스레드풀 사용ExecutorService 인터페이스를 통해 스레드풀을 관리한다.Executors 클래스를 사용하여 다양한 유형의 스레드풀을 생성한다.*..

1. 서버 IP 가져오기InetAddress.getLocalHost()import java.net.InetAddress;import java.net.UnknownHostException;public class ipTest { public static void main(String args[]) throws UnknownHostException { InetAddress ipnetAddr = InetAddress.getLocalHost(); System.err.println("현재 아이피 : " + ipnetAddr.getHostAddress()); System.err.println("현재 hostname : " + ipnetAddr.getHostName()); }}..
JPA(Java Persistence API)란?객체 지향 프로그래밍과 관계형 데이터베이스 간의 차이를 자동으로 연결해 주는 역할을 하며 다음과 같은 장점이 있다. 1. SQL 중심 -> 객체 중심 개발 JDBC API를 통해 직접 SQL 쿼리를 작성하는 경우, 프로젝트가 커지고 쿼리가 복잡해질수록 관리가 어려워질 수 있는데 JPA를 사용하면 SQL에 대한 의존도를 줄여주어, 복잡한 프로젝트에서도 객체 중심으로 효율적인 개발을 할 수 있다. 2. 생산성 증대CRUD를 간단한 메서드를 통해 사용할 수 있다.저장: jpa.persist(member)조회: Member member = jpa.find(memberId)수정: member.setName("변경할 이름")삭제: jpa.remove(member)JP..

필터는 1개 이상이 존재할 수 있으며 각각의 필터는 맡은 작업을 수행하고 작업이 다음 필터에서 수행될 수 있도록 제어권을 넘겨주면서 최종적으로 서블릿까지 도달한다. FilterChain은 요청이 여러 필터를 거쳐 최종적으로 서블릿에 도달하도록 하는 구조.각 필터는 doFilter 메서드 내에서 chain.doFilter(request, response)를 호출하여 다음 필터 또는 서블릿으로 요청 전달.필터 체인의 각 필터는 요청과 응답을 처리할 수 있으며, 필터 체인이 완료되면 서블릿이 요청을 처리.출처 : https://realrain.net/posts/spring-security-filterOpenAI ChatGPT (https://openai.com)

Java로 난수를 생성하는 방법이 여럿 있는데 대표적인 3가지 방식을 정리해보려고 한다. 1. Math.random() 메서드 0.0 이상 1.0 미만의 난수가 생성된다. 그러나 Math.random()은 고정된 시드를 설정할 수 없어, 동일한 난수 시퀀스를 재현하기 어렵다는 단점이 있다. import java.util.*;class Main { public static void main(String[] args) { double num1 = Math.random(); int num2 = (int)(Math.random()*100); // 0 ~ 100 사이의 난수 생성 System.out.println(num1); System.out..

자바를 사용하여 원하는 URL로 이동할 수 있는 QR 코드 이미지를 다운로드하는 방법에 대해 알아보자.@RequestMapping("/qrDownload.do")public void qrDownload(HttpServletResponse response) throws WriterException { try { //QR코드 이미지 생성 QRCodeWriter qrCodeWriter = new QRCodeWriter(); Map hintMap = new HashMap(); hintMap.put(EncodeHintType.CHARACTER_SET, "UTF-8"); BitMatrix bitMatrix = qrCodeWriter.encode("..

프로젝트 내에 있는 특정 파일을 다운로드하는 url을 만들어보려고 한다.(다운로드할 파일의 경로 : http://localhost:8080/resources/file/sample.pdf)@RequestMapping("/downloadFile.do")public void downloadFile(HttpServletResponse response) { String fileUrl = "http://localhost:8080/resources/file/sample.pdf"; try { Path tempFilePath = Files.createTempFile("sample", ".pdf"); URL url = new URL(fileUrl); Files.c..

1. File 클래스File 클래스는 파일 및 디렉터리를 생성하고 존재 여부를 확인하는 기능을 제공한다.File file = new File("test.txt"); 대표적인 메서드를 살펴보자. 1) file.createNewFile() : 파일 생성2) file.mkdir() : 디렉터리 생성File dir = new File("testDir");if(dir.mkdir()) { System.out.println("디렉토리 생성");} 3) file.exists() : 파일 또는 디렉터리 존재 여부 확인4) file.getName() : 파일 이름5) file.getPath() : 파일 경로6) file.getAbsolutePath() : 파일 절대 경로7) file.length() : 파일 크기(b..