분류 전체보기
-
HTTPS, TLS, SSL개발/기술 2023. 2. 28. 17:21
HTTPS HTTP는 Hyprtext Transfer Protocol의 약어로 HTML을 전송하는 통신 프로토콜을 의미한다. HTTPS는 Hypertext Transfer Protocover over Secure Socket Layer 로 SSL 위에서 이뤄지는 HTML 통신 규약을 의미한다. 간단히 데이터를 안전하게 전송, 전달 할 수 있도록 보안 기능을 추가한 HTTP 프로토콜이라고 말할 수 있다. TLS Transport Layer Security의 약자다. 과거에는 SSL로도 불렸다. TLS는 컴퓨터 네트워크에 통신 보안을 제공하기 위해 설계된 암호 규약이다. TLS를 이용하면 클라이언트 서버 응용 프로그램이 네트워크로 통신할 때 암호화, 인증, 무결성을 보장한다 HTTP와 달리 암호화, 복호화 ..
-
Java - synchronized, wait, notify개발 2023. 2. 28. 12:17
멀티 쓰레드 환경에선 두개 이상의 쓰레드가 동시에 같은 데이터를 접근하는 경우가 발생한다. public class ThreadTest { public void run() { for (int i = 0; i { System.out.println("thread " + finalI + " starts"); method("thread " + finalI + " running"); }); thread.start(); } } private void method(String msg) { System.out.println(msg); try { TimeUnit.SECONDS.sleep(1); } catch (In..
-
자바 - Garbage Collector개발 2023. 2. 24. 16:00
JVM은 Garbage Collector (GC) 를 이용해서 Heap 메모리를 주기적으로 청소한다. GC는 사용하지 않는 객체를 확인하고 삭제해 메모리 공간을 확보하는 역할을 한다 객체가 GC의 대상이 되는 경우는 크게 두가지다. 객체를 참조하는 레퍼런스가 null로 세팅되는 경우 객체를 참조하는 레퍼런스의 범위가 종료되는 경우 (예로 함수 블럭 내에서 실행을 모두 완료하는 경우나 등등) 간단한 예제를 살펴보자. stack 메모리상에 있는 지역변수가 없어지면 그에 상응하는 객체는 더이상 쓸모가 없으므로 GC의 대상이 된다고 본다. 물론 다른 곳에서 참조하고 있다면 GC의 대상이 아니다. class House() {} class Person {} fun main() { val house = House()..
-
JAVA - 직렬화, 역직렬화개발 2023. 2. 24. 15:13
직렬화, 역직렬화 자바의 직렬화는 객체를 바이트의 연속으로 변환시키는 기술이다. 역직렬화는 반대로 바이트의 연속을 오브젝트로 전환해주는 기술이다. 직렬화된 객체가 파일에 기록되면 역직렬화를 통해 파일에서 읽어온 데이터를 메모리에서 객체로 쓸 수 있다. 이렇게 인터뷰용 답변만 준비하지말고 직접 코딩해서 체험해보는게 좋다. Person이라는 클래스를 직렬화해서 file.ser이라는 파일에 바이트코드를 써보자. data class Person(val name: String, val age: Int) : Serializable try { val person = Person(name = "ryan", age = 30) val fileOut = FileOutputStream("file.ser") val objOut..
-
JAVA - 다중상속을 허용하지 않는 이유는 뭘까?개발/기술 2023. 2. 24. 12:59
최근 면접에서 "Java가 다중상속을 허용하지 않는 이유는 뭘까요?" 라는 질문을 받았다. 상속은 오직 클래스 하나만 가능하다는 문법만 알았지 그 이유에 대해서 깊게 고민해보지는 않았다. "인터페이스는 다중으로 구현할 수 있는데, 상속만 이렇게 막은 이유가 있을까요?" 라는 추가질문이 이어지자 제대로 답변도 못하고 '정말 그렇네... 왜그렇게 만들었을까...?' 라는 생각이 면접을 마치고 집에 와서도 머릿속을 멤돌았다. java class 는 암시적으로 object 클래스를 상속하고 있다. 대부분의 클래스에서 기본으로 포함된 함수 toString(), hashCode(), equals() 가 object 로부터 상속받은 함수들이다. 클래스 상속 관계에선 위 함수들은 어떻게 처리될까? public clas..
-
Flask SQLAlchemy vs SQLAlchemy개발 2023. 2. 14. 21:22
파이썬을 서비스를 개발할 때 ORM은 SQLAlchemy 말고 딱히 다른 옵션이 없다. 그런데 Flask 개발자는 일반 SQLAlchemy와 Flask에 최적화된 Flask-SQLAlchemy 중 한가지를 골라야한다. 사실 이 두가지는 완전히 다른 라이브러리는 아니다. Flask SQLAlchemy는 기존 SQLAlchemy에서 일부를 가져와 Flask에 맞게 바꾼 형태다. 세부적으로 말하면 Flask-SQLAlchemy는 세션 관리를 app 컨텍스트에 맞춰 관리해주기 때문에 편하다. 반면 SQLAlchemy를 사용하는 경우에는 세션 관리를 개발자가 직접 해야한다. SQLAlchemy를 사용하는 경우 코드는 아래처럼 짜게 된다. SQLALCHEMY_DATABASE_URL = "postgresql://co..
-
Python - namedtuple개발 2023. 2. 14. 18:23
namedtuple 파이썬에서 튜플은 컴마로 나눠진 데이터의 집합을 말한다. 예로 이런 것들은 모두 튜플이다 data: Tuple[str | int, ...] = (1, 2, 4, "Geek") 튜플은 배열처럼 index로 접근할 수 있으나 Dict처럼 개별 값에 대한 키 값이 없다보니 관리하는게 쉽지 않다. 그래서 파이썬에서는 namedtuple 걸 사용해 필드 값을 설정할 수 있게 했다. from collections import namedtuple Point = namedtuple("Point", ["x", "y"]) point = Point(x=3, y=4) 결과 값은 다음과 같이 나온다. 필드 명에 따라서 값 접근이 가능하기 때문에 더 직관적으로 값을 받을 수 있다. print(point) pr..