IT 47

[Java] 자바의 동시성 (Concurrency)

자바의 동시성 자바는 멀티쓰레드를 지원하는 언어이다. 멀티 쓰레드 프로그래밍에서 고려해야 할 것이 바로 동시성 문제이다. -> 동기화를 해주어야 한다. Thread safe? - 쓰레드 세이프라는 것은 멀티쓰레드 프로그래밍 환경에서 특정 자원에 대해 여러 쓰레드로 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 의미한다. - 자바 JVM내 Method 영역내의 데이터나 인스턴스 변수와 같이 Heap영역에 저장되는 데이터는 여러스레드 간에 공유되는 자원이기때문에 Thread safe한 자원이 아니다. -> 그렇기때문에 Thread safe하지 않은 자원에 대해서 데이터의 안정성과 신뢰성을 보장하고, 동시성 문제를 발생시키지 않기 위한 동기화가 필요하다. 자바의 동기화 방법 1. Syncronize..

IT/JAVA 2022.03.15

REST API란?

REST API란? Representational State Transfer 의 약자이다 자원의 이름으로 URI를 명시, 구분하여 HTTP Method ( POST, GET, PUT, DELETE)를 통해 해당자원에 대한 CRUD Operation을 적용하는 것을 의미한다. 창시자 Roy T.Fielding 의 박사학위 논문에 그는 분산 하이퍼미디어 시스템 (예:웹)을 위한 아키텍쳐 스타일 이라고 표현했다. (+) 토스 개발자의 세션을 보고 기록하였습니다. https://tv.naver.com/v/2292653 Day1, 2-2. 그런 REST API로 괜찮은가 NAVER Engineering tv.naver.com 인터넷에 어떻게 정보를 공유할수 있을까? 고민하다가 -> 정보들을 하이퍼텍스트로 연결하는..

IT/etc 2022.03.14

MVC패턴이란?

Q. 모델-뷰-컨트롤러 (Model-View- Controller) 컴퓨터 프로그램 개발 중 많이 듣는 MVC구조, 패턴, 아키텍처라는 말은 무엇? A. MVC패턴은 디자인 페턴 중의 하나이다. 하나의 어플리케이션을 구성할때 구성요소를 세가지 역할로 구분한 패턴이다. - 데이터 객체를 모델(Model)이라 지칭하고, 데이터는 내부 상태에 대한 정보를 가지고 있어야한다. - 사용자 인터페이스 요소 를 뷰(View)라고 지칭한다. - 데이터와 사용자인터페이스 요소를 잇는 다리역할을 한다. Q.MVC 패턴을 사용 하는 이유는 무엇인가? A. 서로 분리되어 각자의 역할에 집중할 수 있도록 하여, 유지보수성, 어플리케이션의 확장성, 유연성을 증가시키고, 중복코딩이라는 문제점을 제거하기 위해 사용한다. 역할분담하여..

IT/etc 2022.01.24

Swagger 설정하기 (gradle)

Swagger는 REST 웹서비스를 설계, 빌드, 문서화 하는것을 도와주는 오픈소스 소프트웨어이다. Spring으로 RestAPI를 개발하고 그에대한 문서를 정리할때, Swagger를 이용하게되면 이런 작업이 보다 편리하다. 문서 자동화 뿐만 아니라 제공되는 UI에서 직접 API테스트를 할 수 있다. 1. 의존성 추가 아래의 주소에서 사용하고싶은 스웨거 버전의 디펜던시를 찾아 프로젝트에 추가한다. https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui 2. Swagger 설정 추가 @Configuration 으로 스웨거Config를 등록한다. 옵션 설정은 이곳에서 한다. import org.springframework.context.an..

IT/Server 2021.12.17

프록시환경에서 clientIP 얻기

클라이언트와 서버의 중간의 로드밸런서나 프록시를 거치면, 서버 접근 로그에는 로드밸런서나 프록시의 IP 주소를 담고있다. 클라이언트의 원 IP를 알기위해서는 X-Forwarded-For (XFF) 헤더가 표준으로 사용된다. 아래의 코드로 Util 소스에서 처리한다. WebServer, WAS, L4, proxy 종류와 상관없이 clientIP를 가져오기 위해서는 다음과 같은 순서로 IP를 찾아야한다. import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletRequest; public class LogUtil { private static Logger logger = LoggerFactory.g..

IT/JAVA 2021.12.17

[Docker] 도커/쿠버네티스 실습 기록

참고 서적 : 시작하세요! 도커/쿠버네티스 환경 : Mac OS > vitrualBox > ubuntu 1. 로컬에 우분투 설치 1-1. VirtualBox 다운 및 설정 방법 참고 : https://blog.naver.com/alice_k106/220882666548 1-2. 운영체제에 맞는 virtualBox 다운 https://www.virtualbox.org/wiki/Downloads 1-3. 우분투 가상이미지 .iso 파일 다운 http://releases.ubuntu.com/16.04/ 맥에 설치하면서 시스템 무결성 문제로 겪는 문제 해결에 도움된 사이트 : https://m.blog.naver.com/5341287/221697740777 -> 재부팅할때 복구모드 진입하면서 시간이 오래걸려서 ..

IT/Server 2021.09.01

[Docker] 도커란? MacOS에 도커 설치하기

개발자에게 스터디란 꼭 필요한 부분.. 도커 컨테이너로 토이프로젝트를 만들어 실습해보고자 한다. 도커란 ? Docker는 리눅스 컨테이너에 어플리케이션을 신속하게 구축하고 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. Docker는 Go언어로 작성되어있으며, 소프트웨어를 컨테이너라는 표준화 된 유닛으로 패키징한다. 이 컨테이너는 라이브러리, 시스템도구, 코드, 런타임 등 소프트웨어를 실행 하는데에 필요한 모든것이 포함되어있다. 도커를 사용하면 환경에 구애받지않고 어플리케이션을 배포 및 확장 할 수 있다. 아주 쉽게 가상화 머신을 생성하고 관리할 수 있어 2013년 배포 이후 꾸준히 인기가 좋아지고있다. 도커파일 하나만 공유하면 다른 환경에서도 같은 셋팅의 가상화머신을 생성 할 수 있다. 도커의 장점 ..

IT/Server 2021.08.31

[GIT] MacOS에서 Git 사용하기

1. 터미널에서 깃 저장소로 사용할 디렉토리로 이동해서 git init 을 입력해 이 디렉토리를 로컬 Git저장소라고 알려주는 작업을 함 drwx------@ 4 we staff 128B 7 6 15:49 Applications drwx------+ 49 we staff 1.5K 8 31 00:43 Desktop drwx------+ 6 we staff 192B 8 29 23:36 Documents drwx------@ 107 we staff 3.3K 8 31 00:44 Downloads drwx------@ 65 we staff 2.0K 7 9 15:57 Library drwx------+ 4 we staff 128B 7 6 09:38 Movies drwx------+ 4 we staff 128B 7 ..

IT/GIT 2021.08.31

[GIT] Mac OS에서 Git 설치하기

맥 환경에서 git을 한번도 사용해본적이 없어 익히면서 기록 해두려고 작성합니다. 환경 맥 Catalina 10.15.7(19H15) 단계 1. homebrew 설치 homebrew 는 Mac환경에서 유용한 패키지를 설치하도록 도와주는 패키지 관리자입니다. brew install을 이용해 패키지들을 쉽게 설치 할 수가 있습니다. 자세하게는 사이트에서 설치방법을 참고합니다 아래 명령어를 입력 후 맥 password를 입력하면 설치가 됩니다 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - https://brew.sh/index_ko Homebrew The Missing Package..

IT/GIT 2021.08.30

[JAVA] 객체지향프로그래밍(OOP)란?

객체 객체란 말그대로 대상을 나타내는 단어이다. 객체지향프로그래밍(OOP) 객체의 관점에서 유기적인 관계를 통해 프로그래밍 하는 것을 의미한다. C는 절차지향 프로그래밍이라고 한다. 프로세스가 함수 단위로 순서대로 진행 되는 것을 말한다. OOP의 특징 1. 추상화 객체의 공통된 속성들 중 필요한 부분을 클래스로 정의하는 설계 기법 2. 캡슐화 접근제어자를 이용하여 불필요한 정보를 감출수 있고, 정보은닉을 할수 있다. 그리고 사용자의 입장에서는 public으로 정의된 속성만 알면 된다. 3. 상속 부모클래스가 자손클래스에게 속성을 물려주는 것 상속을 통해 코드의 중복을 없앤다. 코드의 재사용이 목적이다. 4. 다형성 오버라이딩을 통해 형태가 같은데 다른 기능을 하는것. OOP에서는 다형성을 허용한다

IT/JAVA 2021.07.12

[Spring] 의존성 주입 (Dependency Injection, DI)

의존성 주입이란 객체지향 프로그래밍을 하다보면 한번 쯤 듣게되는 용어이다. 코드에서의 의존성이란 결합도가 높다는 것을 의미한다. A클래스에서 B클래스의 일부를 참조할 때 B에서 변경이 일어나면 A도 변경해줘야하는 비효율적인 상황이 발생 할 수 있다. 그러면 코드의 재활용성이 떨어지고, 결합도(Coupling) 가 높아지게 된다. Spring 프레임워크는 이 부분을 강력하게 지원하고 있다. 두 객체간의 관계를 결정해주는 디자인 패던으로, 인터페이스를 통해 의존관계가 고정되지않고 관계를 다이나믹하게 주입하여 유연성을 확보하고 결합도를 낮출수있게 해준다. DI를 해야하는 이유 - 코드의 재활용성이 높아진다 - 객체간의 의존성을 줄이거나 없앨 수 있다. - 객체간의 결합도를 낮추면서 더욱 유연한 코드를 작성 할..

IT/etc 2021.07.12

[JAVA] 오버로딩과 오버라이딩의 차이

자바에서는 오버로딩과 오버라이딩의 개념이 있다. 이름이 비슷하여 처음에 많이들 헷갈리는 부분이다 오버로딩(Overloading) - 메서드의 이름이 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것이다. - 리턴값만 다른 오버로딩은 있을 수 없다. 오브라이딩 (Overriding) - 상위 클래수를 상속받아 매서드를 하위클래스가 재정의 하는 것이다 - 메서드와 파라미터, 리턴타입이 동일해야한다.

IT/JAVA 2021.07.12

[JAVA] 컬렉션(Collection)

컬렉션 프레임워크 컬렉션은 자바에서 자료구조를 구현한 클래스들을 칭하는 용어이다. 자료구조(Data Structure)는 데이터를 저장하기위한 구조이다. 자바는 자료구조 처리를 위해 단순한 배열부터 리스트, 맵, 집합 에 이르기까지 다양한 프레임워크 기능을 제공한다. - 대표적인 컬렉션 종류 컬렉션 설명 List 순서가 있는 자료구조 Map 키와 값로 이루어진 자료구조 Set 집합을 나타내는 자료구조 Queue 들어오고 나가는 것의 순서가 정해진 자료구조

IT/JAVA 2021.07.12