어노테이션 어노테이션은 주석이라는 뜻을 가지고 있다. 기본적으로 우리가 아는 주석은 // 또는/* */ 이렇게 생겼는데, 어노테이션과 일반적인 주석은 뭐가 다른걸까? - 어노테이션의 역할도 주석과 크게 다르지 않는다. - 일반주석과 큰 차이점은 코드를 작성할 수 있다는 것이 다르다. - 코드를 작성할 수 있다는 뜻은 어노테이션으로 뭔가를 할 수 있다는 뜻이 된다. - 어노테이션도 enum과 마찬가지로 1.5에 등장했다고 한다. 어노테이션을 정의하는 방법 public @interface Make { } 이렇게 정의하면 된다. enum은 java.lang.Enum에 상속되어있다고 학습하였다. 그러면 어노테이션의 조상님은 과연 뭘까? 바이트 코드를 통해 확인해보자. public abstract @interfa..
나는 배달API를 restAPI로 만들어 볼려고 한다. 내용은 스프링 기반 REST API 개발 에서 공부한 내용을 참조해서 만들었다. 원래는 restAPI에 대한 정의를 말하고 시작해야 되지만 아직은 설명하기는 어려운 것 같다, 일반적인 api보다 상태를 자유롭게 바꿀 수 있다는 건 확실하다. 아무튼 api를 만들기위해서는 dto가 필요하다. 그러니까 자바빈같은게 필요하다는 뜻이다. 간단하게 @Builder @Setter @Getter public class Delivery { private int id; private String item; private String user; private LocalDateTime deliveryTime; private DeliveryStatus status; } ..
enum : 열거형이라고 불리며, 서로 연관된 상수들의 집합이라고 불린다. 원래 자바에는 enum클래스가 존재하지 않았지만, JDK1.5에 추가되었다고 한다. C언어 같은 언어에서는 enum클래스의 역할은 단순히 상수들의 집합으로 사용되었지만, 자바는 타입까지 비교가 가능하다. enum을 만드는 방법 기본적으로 public enum Language { C, JAVA, KOTLIN, JAVASCRIPT } 이렇게 만들면 된다. 이들은 왼쪽부터 오른쪽으로 0번부터 3번으로 측정된다. System.out.println(Language.C.ordinal()); System.out.println(Language.JAVA.ordinal()); System.out.println(Language.KOTLIN.ordin..
자바가 제공하는 예외 계층 구조 비유 우리가 병이 생긴다면, 병원으로 간다. 그 병이 치명적일 수도 있고, 치명적이지 않을 수 있다. 만약, 그 병이 치명적이라고 가정한다면, 제대로 치료를 받지 않으면 죽게 될 수도 있다. 만약, 그 병이 치명적이지 않는다고 한다면, 병원에 가지 않고 자가 치료가 가능할지도 모른다. 실제 프로그램도 마찬가지다. 에러가 치명적이라면, 그 예외를 해결을 해야된다. 그래야 프로그램을 계속 유지할 수 있기 때문이다. 컴파일 에러 가벼운 감기 처럼(아닌 분들도 계시지만 ㅜㅜ),우리가 코드상에서 스스로 해결할 수 있는 에러도 존재한다. 이것을 컴파일 에러라고 한다. 하지만 이것도 치료하지 않는다면, 죽을 수도 있다. 이것을 치료조차 하지 않는다면? 여기서 알 수 있는 건 아무리 가..
만약, 로또에 당첨되었다고 생각해보자. 근데, 당첨된줄 모른다면 무슨 의미가 있을까? 다른 사람은 몰라도 당첨된 사람은 알고 있어야 되지 않을까? 그러면 무슨 의미인지는 모르겠지만... ㅜㅜ 이럴때 사용하는것이 옵저버 패턴이라고 한다. 여기서 디자인 패턴을 설명하지는 않겠지만, 옵저버 패턴을 사용하면 당첨내용을 알 수 있다는 것만은 분명하다. 코드는 최대한 간단하게 작성하였다. 먼저 당첨 번호를 발생시키는 코드 public class Lotto extends ApplicationEvent { private String data; public Lotto(Object source, String data) { super(source); this.data = data; } public String getData..
이더넷은 네트워크 인터페이스의 프로토콜이다. 이더넷이 사용하는 주소값은 IP주소일까? 아니면 MAC주소일까? 네트워크 장비에 연결을 해야되기 때문에, 이더넷은 MAC주소를 알고 있어야 한다. 네트워크는 어떻게 구성할 수 있을까? 네트워크 인터페이스에 존재하는 건 무엇일까?(이더넷) 지금까지 인터넷 계층과 트랜스포트 계층에서 존재하는 프로토콜을 알아보았다. 그렇다면 네트워크 인터페이스에도 존재하는 걸까? 이것을 네트워크 프로토콜이라고 말하기는 잘 모르겠지만, b-programmer.tistory.com 이 글에서 알수 있듯이 네트워크 토폴로지으로 네트워크 맵을 만든다. 이더넷은 단순한 UTP선이기 때문에 다른 장비가 존재해야 네트워크를 구축 할 수 있을것 같다. 이것을 도와주는 장비가 L2스위치다. L2스..
지금까지 인터넷 계층과 트랜스포트 계층에서 존재하는 프로토콜을 알아보았다. 그렇다면 네트워크 인터페이스에도 존재하는 걸까? 이것을 네트워크 프로토콜이라고 말하기는 잘 모르겠지만, 이것들도 어떻게 보면 어떠한 규약이기 때문에, 프로토콜이라고 말해도 틀린 대답은 아니라고 생각한다. 아무튼 그렇게 생각하면 크게 두 가지 프로토콜이 존재한다. 이더넷, WIFI(무선) MAC 주소 네트워크를 식별하기 위해 존재하는 IP주소와 함께 네트워크 장비를 식별하기 위한 주소값이 존재한다. 이 값은 IP주소와 달리 한번 정해지면 바꿀 수 없다고 한다. 맥주소는 OUI(회사 / 벤더 식별 코드 24비트) + 시리얼 코드(24비트)로 구성되어있다. mac주소 표기는 - 1바이트씩 16진수로 변환하고 '-'구분 - 1바이트씩 1..
스프링으로 프로그램을 만들 때, 각자 환경을 조성 할 수 있도록 environment라는 기능을 제공한다. 환경을 조성하는 방법에는 여러가지가 존재하는데, 프로퍼티를 추가하는 방법과 프로파일을 추가하는 방법이 존재한다. 프로파일( == 프로필[profile]) 메인 환경을 만드는 방법. 만들 고 싶응 빈에 다음 처럼 작성해줍니다. @Service @Profile("god") public class God { } 이 뜻은 프로파일명 god일때만 이 빈을 사용한다입니다. 이렇게 환경을 조성하는 대표적인 이유는 실제 서버와 테스트 서버를 구분짓기 위함이라 해석 할 수 있다. 즉, 테스트 서버에는 출시하기 어려운 것들을 실험? 할 수도 있다. 만약, 인텔리제이 얼티미티버전을 사용한다고 한다면, VM option..
인터넷 계층에서는 IP,ICMP,ARP가 동작한다고 했다. 이번에는 제 3계층인 트랜스포트 계층에 대해 설명하려고 한다. 트랜스 포트 계층에는 중요한 프로토콜 2가지가 존재한다. TCP와 UDP가 그 주인공들이다. TCP TCP는 IP와 달리 신뢰성이 높은 프로토콜이다. 완벽주의 성향을 가진 TCP는 통신을 할때 응답을 받는다. 즉, 부탁을 하게되면, 반드시 그 부탁을 제대로 받는지 확인작업을 겨쳐야 한다. 신뢰도는 네트워크 세상에서 최강이지만 굉장히 귀찮은 프로토콜이다. 이것을 네트워크 용어로 3 way-handshake라고 부른다. 생각해보면, tcp가 하나뿐일까? 하나일 수도 있지만, 여러개라고 생각해보자. tcp는 굉장히 신중한 녀석이다. 만약 여러개라면, tcp사이에서도 혼란을 야기시킬 수 밖에..
스프링에서는 IOC라고도 불리며, DI라고도 불린다. 엄밀리 따진다면, 살짝 다를 수 있는데, 그건 어떻게 해석하냐의 차이라고 생각한다. IOC : 역전 컨테이너 DI : 의존성 제어 즉, IOC는 컨테이너이고, DI는 기술이다. 뭐 따지고 보면 같기 때문에 다르다고 말한다는 건 아닌 것 같다. 아무튼 의존성을 주입하는 방법은 굉장히 많이 존재한다. 몇 가지 예시를 살펴보자. public class SubHello { public SubHello() { System.out.println("sub Hello"); } } public class Hello { public Hello() { SubHello subHello = new SubHello(); System.out.println("hello?"); }..
개요 스프링은 IOC (Injection Of Container) 를 이용해서 bean으로 관리하게 된다. 간단하게 @Service public class Study { } 라고 작성할 수 있습니다. 객체를 만들어 보자. @SpringBootTest class StudyTest { @Autowired private Study study; @Test void test() { System.out.println(study); } } 놀랍게도 객체가 생성되었다는 것을 알 수 있다. 이것이 바로 스프링의 IOC기능이다. 참고로 static한 상태에서는 일반적인 방법으로 만들 수 없다.(일반적이지 않다는 이야기는 다른 방법이 있을 수 도 있지만, 내가 아는 선에서는 없다는 뜻이다.) 발단1 하지만 위와 같은 방법으..
사설 IP 공인 IP 우리는 IP를 이용해서 네트워크를 만들었다. 또, 인터넷이라는 거대한 네트워크가 이미 존재한다. 우리가 학습한 대로 한다면, 특정 그룹으로 네트워크를 구성했기때문에 우리는 인터넷(다른 네트워크)를 이용할 수 없다. 물론 네트워크를 연결하는 무언가를 설치할 수도 있지만, 그것을 설치하기에는 너무 비용이 많이 들것 같다. 왜냐하면 우리만 네트워크를 만들 수 있는 것이 아니기 때문이다. 어떻게 해야할까? 이럴 때 필요한 것이 NAT(Network Address Translation)를 이용하면 된다. NAT는 쉽게말해 우리가 만든 IP주소를 인터넷을 사용할 수 있는 IP주소로 변환시켜주는 역할을 한다. 즉, 네트워크 전용 컨버터라고 할 수 있다. 사설 IP 주소 목록 10.0.0.0 ~ ..