목록Programming (30)
우당탕탕 좌충우돌 개발일기
InputStream(입력스트림)과 OutputStream(출력스트림)은 기본 스트림으로 byte 단위로 데이터를 다룬다. FileInputStream / FileOutputStream파일로부터 데이터를 읽기/쓰기 위한 입력/출력용 기본 스트림바이트 단위의 입력/출력을 처리하므로 이미지나 오디오 파일과 같은 이진 파일을 다룰 때 유용하다. InputStream이 추상 클래스는 바이트(Byte) 입력 스트림을 나타내는 모든 클래스의 슈퍼 클래스다.하위 클래스에는 FileInputStream, ByteArrayInputStream이 있음(xxxInputStream 식으로 표현됨) FileInputStream: 기존 파일과 연결된 입력 스트림 객체를 생성 FileInputStream(File fil..
✨ 스프링 빈(Bean)을 등록하는 데는 크게 2가지 방법이 있다. 1. 컴포넌트 스캔(Component Scanning) @Service, @Repository, @Controller 등과 같은 어노테이션을 사용하여 클래스를 빈으로 등록한다. (해당 어노테이션들은 @Component를 포함하고 있음) 이 방법은 클래스에 어노테이션을 붙이면 스프링이 자동으로 해당 클래스를 찾아서 빈으로 등록하는 방식이다. @Service public class MyService { //... } 🍅 여기서 잠깐! @Autowired라는 어노테이션을 사용하려면, 기존 컨트롤러,서비스,레포지토리에도 각각 @Controller,@Service,@Repository 어노테이션을 사용해줘야 한다. 그렇지 않을시 해당 클래스들은 ..
assertThrows는 JUnit 5에서 제공하는 메서드로, 특정 예외가 발생하는지 테스트하는 데 사용된다. 특히 메서드가 예외를 던지는 것을 예상하고, 해당 예외가 실제로 발생하는지 테스트할 때 유용하게 사용되는 특징이 있다. import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertThrows; public class MyServiceTest { @Test public void testDivideByZero() { MyService myService = new MyService(); // 특정 메서드 호출 시 ArithmeticException이 발생하는지 확인 assertThrows(Arithmet..
TestCase는 작성한 각각의 테스트들을 class 단위로 한 번에 테스트 할 수 있다는 장점이 있다. 그러나, 테스트의 순서는 보장되지 않아 한 번에 돌리는 경우 무작위로 테스트 된다는 단점도 공존한다.🤨 (따라서 순서에 의존적으로 설계하면 안됨!) 그래서 테스트가 하나 끝나면 clear해줘야 하는데, 그럴 때 사용하는 것이 바로 AfterEach 어노테이션이다. @AfterEach (AfterEach 어노테이션) : 해당 어노테이션을 사용하면 각각의 테스트 메소드가 실행된 후에 정리 작업이나 공통적인 후처리 작업을 수행할 수 있다. import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import static org.j..
스프링부트 프로젝트를 하면서 테스트 케이스를 작성할 때 사용하는 메서드 중의 하나인 Assertions의 두 가지 버전에 대해 설명하고자 한다. ☝️ Assertions (org.junit.jupiter.api 패키지 제공) : 테스트 케이스를 작성할 때, JUnit과 함께 자주 사용되는 것 중 하나인 Assertion 테스트 결과를 검증하고 예상 값과 실제 값이 일치하는지 확인하는 데 사용된다. import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class MyServiceTest { @Test public void testAddition() { MyService myService = new..
Getter & Setter 📝 예제코드 static class MyClass { private String className; public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } } 예제를 보면 인텔리제이에서 ‘MyClass’라는 클래스를 만들고 Alt + Insert를 클릭하면 Getter and Setter를 선택할 수 있다. Getter and Setter를 선택하면 상단의 소스 코드처럼 Get과 Set이 자동으로 세팅 된다. 이걸 자바 빈(Bean) 규약이라고 하는데, className 같은 경우 private이기 때문에 외..
@ResponseBody (ResponseBody 어노테이션) :HTTP에서 BODY 쪽에 return 데이터를 직접 넣어주겠다는 뜻임 ☝ 예제 @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello " + name; } 만약 @RequestParam(”name”) 여기 부분에 ‘stone’을 넣는다면 return 값은 “hello stone" 이 될 것이다. 그래서 템플릿 엔진과 다르게 해당 문자열을 직접 뷰에 보낸다는 의미이다. (↔템플릿은 뷰 리졸버(View Resolver)에게 ‘나랑 맞는 애를 찾아줘’하고 요청을 던져서 화면에 출력함) ✌ ..
관리자페이지 생성 후 관리자 등록 시, 임의의 비밀번호를 생성해서 발급해주려 한다. 임의의 난수를 만드는 함수로는 Random, SecureRandom이 있는데 그중에서도 SecureRandom이 암호적으로 더 강력한 난수를 만들어주는 클래스라고 하기에 사용해 보았다. ✨ SecureRandom 관련 내용은 하단 링크 참조 https://docs.oracle.com/javase/8/docs/api/java/security/SecureRandom.html SecureRandom (Java Platform SE 8 ) This class provides a cryptographically strong random number generator (RNG). A cryptographically strong ra..