728x90

SPRING을 공부하면서 많이 듣던 개념 중 하나는 의존성 주입입니다.

개발자들은 정말 많이 들었지만 이 개념에 대해서 정확하게 알지 못하고 연차가 쌓이는 경우가 대부분입니다.

연차가 쌓일수록 코딩은 기초가 가장 중요하다고 생각합니다. 그래서 저 또한 의존성 주입에 대해 정확하게 알고 가기 위해서 이렇게 포스팅으로 정리하고자 합니다.

의존성 주입 DI(Dependency Injection) 개념

DI는 디자인 패턴 중 하나입니다. 객체 간의 의존성을 단순하게 외부에서 주입해서 사용한다는 의미이다.

실생활에서 예를 들어 설명하자면 우리는 로봇에 팔을 만드는 공장이 있다고 예시를 들어보겠습니다.

 

A 로봇은 3m짜리 팔이 필요하고, B 로봇은 6m짜리 팔이 필요하다고 생각했을 때

우리는 팔을 만드는 공장에 "3m의 팔이 필요해"라고만 전달해주면 3m짜리 팔을 만들 수 있습니다.

 

하지만 전체 로봇 공정 자체가 5m짜리의 팔의 로봇만 만들어진다고 생각했을 때는 3m짜리 팔을 만들 때는 그 전체 로봇 팔을 만드는 공장 프로세스 자체를 바꿔버려야 합니다. 그러므로 각기 다른 팔 길이의 로봇을 생산할 수가 없습니다.

 

의존성 주입이란 로봇을 만드는 공장에 팔을 만드는 공정만 의존성 주입을 하여 각기 다른 팔 길이 (3m, 5m 등)을 생성하여 다양한 로봇의 팔을 만들 수 있게끔 해줍니다.


의존성 주입 DI(Dependency Injection) 주입 방법

  • 생성자 주입
  • 필드 주입
  • Setter 주입

1. 생성자 주입

생성자를 통한 의존관계 주입 예제

예제와 같이 생성자는 생성자를 처음 생성할 때 1회 주입만 가능합니다.

객체의 주입을 해야지만 사용되는 프로그램이라면 강제로 주입을 할 경우에 사용됩니다.

하지만 기본적으로 Spring은 Autowired가 없어도 주입이 가능하도록 편의를 제공하고 있습니다.

 

2. 필드 주입

필드 주입 예제

필드 주입을 통해 단순하게 코드를 짜면 간결하게 짤 수가 있습니다.

하지만 외부에서 변경을 하고 싶어도 불가능하기 때문에 테스트 코드를 할 때 불편함이 있고, 또한 무조건 DI 프레임워크가 존재해야 되므로 점차 사장되는 중입니다. 

3. Setter 주입

Setter를 통한 주입은 주입받은 객체가 변경이 필요할 때 사용이 됩니다.

 

맺은 말

의존성 주입 DI(Dependency Injection)을 통해 우리는 코드를 간결하게 하여 직관성과 편리성을 얻을 수 있습니다. 또한 간단히 DI를 통해 테스트 코드 작성도 쉽게 할 수 있습니다.

우리가 많이 쓰는 spring에서 잘 지원하고 있기 때문에 생성자 주입을 적시적소에 사용한다면 좋은 코딩 편리한 코딩을 하시는데 도움이 되실 겁니다.

반응형
728x90

자바(JAVA)란 무엇인가?

자바는 선마이크로시스템즈라는 회사에서 최초 발표한 객체지향 프로그래밍 언어입니다.

티오베 프로그래밍 순위에 따르면 아직도 자바는 2위에 랭크하며 건재함을 가지고 있는 언어입니다.

자바 순위

자바 공식사이트에서는 아래 사진과 같이 자바 기술과 필요한 이유에 대해서 정리합니다.

JAVA 기술

자바의 특징은 무엇인가?

1. 객체지향언어

자바는 객체지향 언어로 하나하나의 재료들을 가지고 객체를 만들고 그 객체들을 모으고 연결하여 객체지향 프로그래밍(OOP) 개념으로 프로그램을 완성할 수 있게 합니다.

객체지향의 특징으로는 캡슐화, 상속 성 다형성을 지원합니다.

 

 

2. 이식성

어떠한 환경에서도 이식성이 뛰어나 프로그램 실행이 가능합니다.

예를 들어 자바 프로그램을 Window OS에서 실행하던 프로그램을 리눅스에서 실행해도 정상적으로 작동합니다.

즉 자바 실행환경(JRE)만 설치가 되어 있으면 어떠한 운영체제에서도 실행 가능합니다.

 

3. 메모리 자동관리(Garbage Collector)

다른 언어는 메모리를 사용하게 되면 해제를 시켜주는 명령어를 실행시켜주어야 메모리에 과부하가 걸리지 않는다.

하지만 자바는 메모리에 직접 접근할 수 없으므로 해제 명령어를 사용할 수 없습니다.

그렇다면 자바는 어떻게 메모리를 관리할 것 인지에 대해 의문이 생기실겁니다.

그렇게 나타난 것이 Garbage Collector 줄여서 GC라고 부릅니다. GC를 실행하여 메모리 사용을 마친 것들을 찾아 자바에서 메모리를 해제를 시켜줍니다.

그러므로 따로 메모리에 대해서 신경 쓰지 않고 관리를 안 해도 되어서 다른 언어보다 편리하게 사용하실 수 있습니다.

 

4. 함수적 스타일 코딩 지원

JAVA 8 함수적 프로그래밍이 가능한 람다식을 지원합니다.

 

람다식 장점

  • 코드를 간결하게 작성
  • 개발자의 의도가 명확해져 가독성이 향상
  • 함수를 따로 구현 없이 처리 가능

5. 멀티스레드 빠르게 구현

하나의 프로그램이 동시에 여러 작업을 처리해야 하는 경우, 병렬 처리가 가능한 멀티스레드를 구현해야 합니다.

자바는 멀티쓰레드 구현에 필요한 API를 제공해주어 멀티쓰레드를 빠르게 구현이 가능합니다.

 

6. 동적 로딩 지원

 

프로그램을 실행할 때 필요할 때마다 동적으로 메모리를 생성하고 필요 없는 메모리를 자동으로 해제시킵니다.

그러므로 큰 프로그램도 작은 메모리에서 실행이 가능합니다.

 

 

자바란 무엇이며 자바의 특징은 무엇인지에 대해서 정리를 해보았습니다.

코딩을 하면서 중요한 것은 제일 기초가 튼튼해야 한다고 생각합니다.

자바를 시작하시는 분들 또는 아직 자바를 정확히 모르셨던 분들은 자바에 대해서 정확하게 알고 가시길 바랍니다.

반응형
728x90

ORA-04021 에러

문제 원인

ORA-04021: 객체의 잠금 대기중 시간이 초과됐습니다

오라클을 사용하시다 보면 해당 에러를 종종 보실 수도 있습니다.

 

해당 프로시저가 돌아가는 동안에 구조를 변경할수가 없습니다. 이와같은 경우를 방지하기 위해 library lock 과 pin에 의해 lock이 걸립니다.

그러므로 해당하는 프로시저의 실행되고 있는 object 의 lock을 풀어 해결할수가 있습니다.

 

해결 방법

1. 오류난 해당 PRCEDURE의 SID를 추출합니다.

   SELECT SID
   FROM v$access
   WHERE OBJECT = 'PROCEDURE 명';

2. 해당 SID의 실행중인 SESSION 점검합니다.


    SELECT SID, SERIAL#, USERNAME, STATUS
    FROM  V$SESSION
    WHERE SID = '1번에서 추출 된 SID';

3. 해당 PROCEDURE의 실행중인 SESSION 죽입니다.


    ALTER SYSTEM KILL SESSION 'SID,SERIAL#';

* SESSION 을 죽여도 해결되지 않을 경우

1. SESSION에 걸린 PROCESS 추출

   SELECT A.SPID

   FROM  V$PROCESS A

             , V$SESSION B

   WHERE A.ADDR = B.PADDR

   AND     B.SID    = '1번에서 추출된 SID';

2. 서버 접속 후 실행중인 프로시저 찾기

   ps -ef|grep 1번에서 추출된 SPID

3. 프로시저 죽이기

   KILL -9 1번에서 추출된 SPID

 

위와 같이 실행해보시면

 

"ORA-04021: 객체의 잠금 대기중 시간이 초과됐습니다"

이와 같은 에러들은 거의 다 처리 가능할 것으로 생각됩니다.

 

감사합니다~!

 

반응형
728x90

AJP

AJP는 웹서버(Apache)에서 요청되는 것을 WAS에서 들어오는 요청을 위임하는 프로토콜 입니다.

웹 WAS를 구축하는 사람들은 AJP를 통해 웹서버로부터의 오는 요청들을 로드 밸런스 역할로 이용합니다.

 

예를 들어 TOMCAT SERVER.XML에서 AJP를 사용해 각 PORT에 맞는것을 요청해 어떤 PORT로 들어오면 이 WAS를 탈 수 있게 해줍니다.

 

Tomcat Server.xml 예시

위에 사진은 웹서버에서 7019로 들어온 Port를 이 server.xml로 설정된 TOMCAT(WAS)에서 받는 예시입니다.

 

위에 AJP를 사용하기 전 아파치(웹) 서버에서 톰캣으로 보내기 위해 mod_jk라는 모듈을 사용합니다.

 

왜 굳이 웹 서버와 WAS를 나뉘어서 설정을 하는지에 대해서는 아래 포스팅을 보시면 이해가 되실것이라 생각합니다.

아래 URL에서 확인하시면 됩니다.

URL : (gaebaldiary.tistory.com/27)

 

 

 

mod_jk

그렇다면 mod_jk는 무엇인가에 대해 알아보도록 하겠습니다.

 

1. 사용자가 아파치 웹 서버에 접속 Request를 보냅니다.

2. 웹 서버는 맞는 URL과 PORT를 점검한 후 WAS로 보냅니다. (mod_jk역할)

3. 해당 WAS에 설정되어 있는 AJP포트에 맞는 것을 받아 해당 WAS에 소스를 실행합니다.

 

즉 mod_jk는 (APACHE)WEB 서버와 (TOMCAT)WAS를 연결해주는 중간역할 및 로드밸런스 역할을 해준다고 생각하면 됩니다. 그리하여 웹 서버하나로 다중의 WAS를 구현할 수 있게 해주는 프로토콜 입니다.

 

mod_jk 설정방법

 

아래는 해당 mod_jk 설정방법을 간략하게 설명했습니다.

 

아파치 웹 서버의 httpd.conf에 property로 정리해둔 파일을 include 해주어 아래와 같이 property에 코딩을 해줍니다.

그리고 어떤 url에 따라서 worker3으로 갈지도 설정을 해줍니다.

EX) /*.do = worker3

 

그렇다면 해당 URL로 접속 시 AJP포트 7019에 접속을 하여 Tomcat Server.xml 예시에 있는 WAS로 접속을 하게 되어 실행되게 됩니다.

 

웹 서버를 구축하면서 가장 중요시 되는 개념들을 차근차근 정리하고 있습니다.

해당사항이 도움이 됐을지는 모르겠지만 저또한 배우면서 진행중이라 계속하여 포스팅하고 포스팅 된 글에서 수정을 하도록 하겠습니다.

반응형
728x90

최근에 굉장히 정부에서도 밀어주고 제일 각광받고 있는 기술 중 하나인 클라우드에 대해서 소개할까 합니다.

클라우드 란?

클라우드(Cloud)는 한글 그대로 직역하면 "구름"이라는 의미로 위에 떠있는 존재를 가져다가 쓰는 서비스라고 생각하시면 됩니다.

인터넷 통신망 어디서도 구름에 싸여 보이지 않는 자원 컴퓨팅(ex. 아마존 AWS 서버)을 원하는 대로 가져다 쓸 수 것을 말합니다. 구름에 싸여 있어 보이지 않는 (ex. 아마존 AWS 서버)를 굳이 보지 않아도 어느 곳에서든 서비스를 등록하고 사용하면 쓸 수 있는 것입니다. 그러므로 클라우드란 단어가 붙어 사용하게 됩니다.

 

출처: 클라우드 정보보호 안내서, KISA, 2017

클라우드의 예시

전세계적으로 클라우드 서비스를 하고 있는 아마존 AWS 예를 들겠습니다.

아마존 AWS는 서버를 공유해주는 서비스로 많은 사랑을 받고 있습니다.

기업들은 서버를 보유하려면 서버를 설치할 수 있는 공간이 필요합니다. 또한 사용 후 서버를 설치 해제하는 비용 또한 사용자가 감당해야 될 숙제였습니다. On-premise 형태의 서버만 가지고 있던 기업들은 서버 설치 비용 및 유연성 있는 공간 활용 등 다양한 비용들을 절감하고 싶은 문제를 안고 있었습니다.

 

하지만 아마존 AWS는 아마존에서 대량의 서버부지를 확보하여 서버를 설치하고 그에 따른 서비스를 해주어 필요할 때만 사용할 수 있게 서비스를 해주었습니다. 기업들은 굳이 서버를 On-premise 형태가 아니더라도 사용할 수 있게 되어 비용절감 및 공간 활용 등 다양한 장점을 가질 수 있었습니다.

 

* On-premise 단어를 모르는 분들 클릭!(gaebaldiary.tistory.com/14?category=804511)

클라우드(Cloud) 장점

 클라우드의 장점을 정리하자면

 

 1. 초기 선투자 비용이 없다.

    - 기업 입장에서 서버 등 다양한 서비스를 사용하기 위해서는 기본적으로 갖춰줘야 될 초기선투자 비용이 필요하지만 기본적으로 클라우드에서 제공을 하기 때문에 굳이 필요가 없습니다.

 

 2. 운영비용 예측 및 절감

   - 클라우드 서비스비용만 생각하면 되기 때문에 정확한 비용 지출이 예상되며, 사용자/용량 등 다양한 정량화된 수치로 서비스 비용이 측정되기 때문에 절감을 할 수 있는 측면이 많습니다.

 

 3. 인력 낭비 절감 및 비지니스에 집중

   - 이 전에는 기업들이 비지니스 뿐만 아니라 서비스를 하는 모든 것들이 On-premise였기 때문에 내부적으로 인력을 대기해야 됐으며 신경 써야 되는 부분이 많았습니다. 하지만 이제는 클라우드 서비스 업체의 서비스 비용만 지불하면 되기 때문에 그에 따른 인력낭비가 없어졌으며 비즈니스에 집중할 수 있게 되었습니다.

 

 

 

 

 

 

 

 

반응형

'IT > 기본용어' 카테고리의 다른 글

Build 란?  (0) 2021.03.12
온프레미스(On-premise) 란?  (0) 2020.08.25
728x90

IT에 종사하는 분들이라면 정말 많이 들어본 단어 일 것 입니다.

그렇다면 과연 프록시 서버란 무엇일까요?

 

프록시(Proxy) 서버란?

 

프록시 서버는 간단하게 비유를 하자면 대리인 또는 중간업자 라고 생각하시면 됩니다

우리의 네트워크 구조 대부분이 클라이언트가 Request 요청 하면 서버에서 Response를 합니다. 그 중간에 프록시 서버가 끼어서 대리인 역할을 하여 통신을 수행해주는 역할을 합니다.

 

출처 : 위키피디아

위에 그림으로 Alice(Client), Bob(Server)라고 생각하고 설명을 드리자면

 

1. Alice(Client)가 프록시 서버에 현재 시간 알려줘. Request를 요청

2. 프록시서버가 이 Request를 받고 Bob(Server)에게 전달

3. Bob(Server) 는 7.PM이라는 Response를 프록시 서버에 전달

4. 프록시 서버는 Alice(Client)에게 Response를 전달

 

도식화 된 그림으로 설명하면 이렇게 된다.

 

자 그렇다면 그냥 바로 서버(Server)로 접근하면 더 빠를텐데 프록시서버에 접근하는 이유에 의아할 것 입니다.


프록시(Proxy) 서버 사용 목적

1. 캐시 데이터 사용을 위해

프록시 서버는 캐시를 사용해 저장해둔다. 그렇다면 Request를 서버에 접근할 필요 없이 캐시에 저장된 데이터를 Client에게 전달하면 됩니다. 전송 시간 및 트래픽 감소에 도움이 되어 서버 과부하 및 네트워크 병목 현상도 방지에 좋습니다.

 

2. 보안

프록시 서버는 중간에 경유하게 되면 IP를 숨기는 것이 가능합니다.

그리고 방화벽 또 한 가능하여 보안에 도움이 됩니다.

 

3.  접속우회

접속이 제한되어 있는 사이트를 다른나라로 우회하여 접근이 가능합니다.

그렇다면 많은 분들이 프록시 서버와 vpn의 차이를 궁금하실 겁니다.

그냥 접속우회의 관점은 똑같으나 하나의 차이가 있다면 프록시 서버는 데이터의 내용을 암호화 하지 않습니다.

하지만 vpn의 경우는 데이터 내용까지 암호화하기 때문에 더 보안에 좋다고 생각하시면 됩니다.

 

프록시 서버 설정 및 해제 (Chrome)

브라우저 오른쪽 상단에 점3개를 클릭합니다.

 

설정을 클릭합니다.

 

스크롤을 끝까지 내린 후 고급을 클릭합니다.

고급을 클릭하면 밑에 메뉴들이 펼쳐지는데 다시 한 번 스크롤을 끝까지 내린 후 컴퓨터 프록시 설정 열기를 클릭합니다.

그럼 MAC의 경우 아래와 같이 접속됩니다.

웹 프록시에 대해서 우회할 서버 ip와 포트를 설정 후 확인을 누르면 설정이 됩니다.

해제를 원하시면 구성프로토콜 전부를 체크해제 하시고 저장을 누르시면 됩니다.

 

윈도우도 마찬가지로 제가 설명해드린 프로세스대로 들어가신 다음에 우회할 서버 IP와 PORT를 설정하시고 확인을 누르시면 됩니다

반응형

'네트워크 > 기본용어' 카테고리의 다른 글

Yum 이란?  (0) 2021.03.11
IP에 대한 모든 것(IPv4, 유동Ip, 고정Ip, 공인Ip..)  (0) 2020.08.19
728x90

얼마 전 윈도우에서 맥북으로 교체하면서 다양한 설치프로그램을 깔았습니다.

맥 OS 에서는 한글오피스를 직접 구입해서 사용해야 했습니다.

 

그래서 정식 한컴오피스에 접속하여 맥북 한글 오피스의 가격을 찾아봤습니다.

 

왜 이렇게 비싼건지.... 

하지만 난 그래도 정식 툴로 컴퓨터에서 깔아놓고 쓰겠다 하시는 분들은 아래 URL에 접속 후 구매해서 사용하시면 됩니다.

www.hancom.com/main/main.do

 

글로벌 소프트웨어의 리더, 한글과컴퓨터

웹한글기안기 웹과 문서의 경계를 허무는 시작! 데스크탑 한글을 웹에서도 동일하게 사용하세요. HTML5 기반 Non ActiveX 방식으로 IE, Chrome 등 브라우저 지원 완벽한 HWP 호환은 기본, 한글의 단축키

www.hancom.com

하지만 저는 한글오피스를 많이 사용하는 편도 아니기에 간단한 편집이랑 viewer 역할만 있으면 된다는 입장이라

유료보다는 무료로 사용할 수 있는 방법을 찾아봤습니다.

 

한글오피스 무료 사용법

한글오피스를 WEB에서 편집가능하게 해주는 한컴 스페이스라는 tool이 존재했습니다.

우선 아래 url로 접속해줍니다.

 

URL : (space.malangmalang.com/)

 

접속 하시면 아래 화면이 보이실겁니다.

한컴스페이스 Main

우리는 무료로 사용하기 위한 것 이니 "무료로 시작하기"를 클릭해줍니다.

아 이전에 회원가입부터 먼저 하셔야 됩니다~!

 

"무료로 시작하기" 버튼을 누르면 아래와 같은 화면이 나오실 겁니다.

 

"한컴스페이스" tool 자체는 WEB에서 office 관련된 파일들을 편집만 viewer기능을 제공하며 무료로는 총 2GB까지 제공을 합니다.

 

"업로드" 버튼을 통해 내 PC에 있는 한글파일을 업로드하여 직접 편집 및 Viewer가 가능합니다.

 

업로드

편집을 하고 저장한 파일들을 다시 내 PC로 다운로드한 후 올린 파일을 삭제해주시면 2GB로 무료로 꾸준하게 사용하실 수 있습니다.

또한 "새로만들기" 버튼을 통해 한글문서를 창작하여 사용가능합니다.

 

"새로만들기"를 통한 한글문서를 열게 되면 아래와 같은 화면으로 편집을 가능하게 해줍니다.

위와 같이 새로만들기 및 업로드 기능으로 한글문서에 대해 유료로 사용할 필요 없이 저는 편안하게 사용이 가능했습니다.

 

하지만 혹시 보시는 분은 유료로 사용하실 지도 모르니 아래에 한글스페이스 가격별 혜택에 대한 화면을 소개합니다.

 

한글스페이스 가격

유료로 사용하는 경우 혜택 면에서는 pc 설치 사용가능 및 다양한 혜택이 있지만 저 같은 경우는 한글을 많이 사용하지 않는 입장에서는 무료 사용하기로 충분히 사용이 가능했습니다.

 

불법 제품도 아니고 정식제품을 통해 무료로 사용하여 불편함없이 한글문서를 사용하시기를 바랍니다~

반응형
728x90

'디자인 패턴' 개발자를 살아가면서 많이 들어봤던 단어이지만 그에 따라서 이해하기가 정말 어려운 단어이기도 합니다. 

 

'디자인 패턴' 단순하게 이야기 하자면 '패턴' 이라는 말에 주목하면 된다. 지금까지 개발을 해왔던 사람들이 고심고심하여 만들어지고 만들어졌던 몇가지 일정한 패턴 중에 하나를 선택/개발하여 올바른 설계를 해라 라는 의도로 만들어진 패턴들을 '디자인 패턴' 이라고 합니다.

 

그렇다면 디자인 패턴에서는 3가지 구조로 나뉩니다.

 

1. Context

    문제발생 상황 기술 > 패턴이 적용될 상황 기술

     패턴은 상황에 맞게 써야 됨. 항상 유효하지 않는다.

2. Problem

    패턴 적용으로 해결되어야 할 디자인 이슈들을 기술

    여러 제약사항과 영향력도 문제 해결을 위해 고려

3. Solution

   문제를 해결하도록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 기술

   Solution은 구체적인 구현 방법 및 다양한 상황에 적용할 수 있는 템플릿

디자인 패턴

솔루션사업에서도 기존 솔루션을 가지며 그걸 토대로 커스터마이징으로 개발을 진행합니다. 마찬가지로 이미 오랜시간동안 여러 프로젝트에서 재사용 및 유효성은 입증이 되었으며 신뢰할 수 있는 솔루션 패턴이라고 생각하시면 됩니다.

 

디자인 패턴에는 총 3가지의 카테고리가 있습니다.

이들은 인스터스에 관한 생성, 구조화, 행동과 관련이 있습니다.

 

1. 생성 패턴 (Creational Pattern)

    - 객체 생성 Pattern으로 객체의 생성 및 조합을 캡슐화해 객체가 생성되거나 변경되어도 프로그램에 영향을 미치지 않게 하는 유연성을 제공하는 패턴

 

2. 구조 패턴 (Structural Pattern)

    - 클래스나 객체를 합성에 관해 더 큰 구조로 만드는 패턴입니다.

 

3. 행동 패턴 (Behavioral Pattern)

    - 객체나 클래스 사이에서 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴입니다.

 

생성 패턴 (Creational Pattern) 구조 패턴 (Structural Pattern) 행동 패턴 (Behavioral Pattern)
Singleton Adapter Command
Abstarct Factory Composite Interpreter
Factroy Method Decorator iterator
Builder Facade Mediator
protoType Flyweight Memento
  proxy Observer
    State
    Strategy
    Template Method

 

위에 표는 3가지 디자인 패턴의 카테고리에 종류에 대해서 정리한 표 입니다.

반응형

+ Recent posts