본문 바로가기

구현에 들어가기 앞서 완료해야 하는 선행 조건 1. 문제 정의 시스템이 해결해야 하는 문제를 명확하게 기술하기. 해결책에 대해서는 언급하지 않고 문제가 무엇인지를 정의한다. 한 두 장 분량의 간단한 문서이며 반드시 문제점에 대해서 언급해야 한다. 좋은 예시 - 생산량을 기가트론의 주문 수량에 맞출 수 없다. 나쁜 예시 - 기가트론의 주문 수량에 맞추기 위해 자동화된 데이터 입력 시스템을 최적화 해야한다. 2. 요구사항 소프트웨어 시스템이 무엇을 수행해야 하는지에 대해 상세하게 기술하고 해결책을 구현하기 위한 첫 번째 과정. 요구사항 개발, 요구사항 분석, 분석, 요구사항 정의, 소프트웨어 요구사항, 명세화, 기능명세, 명세라고 한다. 요구사항은 명시적이어야 한다. 명시적 요구사항은 사용자가 원하는 것이 무엇인지 알 수 있게 해주며, 논쟁을 피하게 해.. 더보기
소프트웨어 구현의 정의 ※ 소프트웨어 개발 과정 - 문제정의 - 요구사항 개발 -구현 계획 수립 - 소프트웨어 아키텍처 또는 고급 수준 설계 - 상세 설계 - 코드 작성 및 디버깅 - 단위 테스트 - 통합 테스트 - 통합 - 시스템 테스트 - 유지보수 ※ 소프트웨어 구현이란 무엇인가? 소프트웨어 구현은 코드를 작성하고 디버깅하는 것이지만, 그와 더불어 상세 설계, 구현 계획 수립, 단위 테스트, 통합, 통합 테스트를 비롯한 다른 활동도 포함된다. 구현 외에 중요한 활동으로는 관리와 요구사항 개발, 소프트웨어 아키텍처, 사용자 인터페이스 설계, 시스템 테스트, 유지보수가 있다. 구현 활동에 속하는 구체적인 작업 예시 - 성공적 구현 활동을 위한 기초 작업 검증 - 코드에 대한 테스트 방법 결정 - 클래스 및 루틴 설계와 작성 -.. 더보기
개발자가 알아야 할 반응형 웹 기술 ① (반응형 웹 정의) ※ 반응형 웹, 퍼블리셔의 영역 아니야? 개발자가 왜 알아야해? 기존에 반응형 웹에대한 영역은 보통 퍼블리셔의 영역이라 생각하고 있기에 신경을 쓰지 않거나 부트스트랩을 사용하면 됐습니다. 하지만 웹 개발 시 리액트(React), 뷰(Vue), 앵귤러(Angular) 같은 웹 컴포넌트를 많이 사용하는 추세로 가고 있습니다. 그에따라 제이쿼리(JQuery)에 대한 관심과 활용도가 많이 낮아지고 그만큼 제이쿼리(JQuery ) 기반의 부트스트랩의 활용 또한 많이 낮아졌습니다. 게다가 점차 퍼블리셔가 배제된 개발 프로세스들이 정립되면서 개발자들이 반응형 웹의 영역을 떠맡아 해결해야 하는 상황이 오고있습니다. 그렇기에 개발자들이 반응형 웹 기술에 대한 기본적인 것을 알고있으면 도움이 될거라 생각 됩니다. ※ 반응.. 더보기
IntelliJ에서 Spring MVC 프로젝트 생성 및 세팅 (Maven) ※ 목표 IntelliJ를 이용하여 Spring MVC 프로젝트를 생성하고 내 입맛에 맞게 프로젝트 환경을 구성하여 index.jsp 파일을 웹브라우저로 띄운다. ※ 개발 환경 Java8 InteliJ IDEA Spring 5.2.3 Maven ※ 프로젝트 생성하기 새 프로잭트 생성 버튼을 눌러주세요 Maven을 선택 한 후 create from archetype 체크가 해제된 상태로 Next 버튼을 클릭해주세요. 프로젝트 이름을 지정해주세요. 그러면 이렇게 프로젝트 생성이 완료됩니다. ※ 프레임워크 추가 프로젝트 우클릭 > Add Framework Support 버튼 클릭 Spring MVC 체크 한 후 OK 버튼을 클릭해주세요. ※ Tomcat Server 추가 프로젝트 우측 상단에 Add Confi.. 더보기
[JavaScript] ECMAScript 2015 / ES6 (4) / Promise, async-await ※ 프로미스(Promise) 싱글쓰레드인 자바스크립트에서 비동기 처리를 위해서 콜백(callback)을 사용해 왔다. 그 결과 비동기 처리를 온전히 해낼 수 있었지만 이런 콜백이 사용되는 경우가 많아지면서 단점이 드러났다. 단점은 비동기 처리를 순차적으로 해야할 경우 비동기 처리를 중첩시켜서 표현하므로 에러, 예외처리가 어렵다는 것과 중첩으로 인한 복잡도가 증가하는 것이다. 크게 이 두가지 단점을 해결하기 위해 프로미스가 예전부터 라이브러리로 생겨났고, 이것을 ES6에서는 언어적 차원에서 지원을 하게 되었다. ※ 동기(Sync)? 비동기(Async)? 동기는 메소드를 실행시킴과 동시에 반환 값이 기대되는 경우를 동기 라고 표현하고 그렇지 않은 경우에 비동기 라고 한다. 메소드를 실행시킴과 동시에 반환 값.. 더보기
안전한 패스워드 저장 및 자바로 SHA-256 해싱 알고리즘 사용하기 일반적인 패스워드 저장방법 단순 텍스트 단방향 해시 함수의 다이제스트(digest) 단순 텍스트를 사용하고 있다면, 지금 당장 변경해야한다. 절대 해서는 안되는 일이다. 단방향 해시 함수는 수학적인 연산을 통해 원본 메시지를 변환하여 암호화된 메시지인 다이제스트를 생성한다. 원본 메시지를 알면 암호화된 메시지를 구하기는 쉽지만 암호화된 메시지로 원본 메시지를 구할 수 없어야 하며 이를 '단방향성' 이라고 한다. ※ 단방향 해시 함수 사용자의 패스워드가 "1234"라면 이 문자열을 흔히 사용하는 해시 알고리즘은 SHA-256으로 인코딩하여 아래와 같은 값을 얻을 수 있다. FF0EB2864FEB22354747F8C85D42CCB5 위의 입력값을 저장하면 사용자는 패스워드를 직접 저장하는 위험을 피할 수 있.. 더보기
[Spring Batch] 스프링 배치 Mybatis + ( Oracle + MsSql ) 다중 DB 연동 기존 사용하던 배치는 Oracle이었다. 그리고 거기에 MsSql을 추가해야 할 일이 생겼다. 물론 될것같긴 했지만 확실하게 확인해보는게 좋을 것 같아 새 프로젝트에서 Oracle + MsSql 세팅을 간단히 해보고 정상적으로 작동하는지 확인해 보기로 했다. 프로젝트의 구조는 기존의 프로젝트 구조와 동일한 형태로 만들어 테스트했다. 1.프로젝트 생성 Eclipse -> New -> Other -> Spring Starter Project (스프링 부트 프로젝트 생성) 2,프로젝트 구조 잡기 패키지 및 설정파일을 기존 프로젝트와 최대한 동일하게 생성 3.DatabaseConfig 파일 생성 (Oracle -> 메인 데이터베이스, MsSql -> 서브 데이터베이스) Oracle Config 파일(Oracle.. 더보기
[JavaScript] ECMAScript 2015 / ES6 (3) / 화살표 함수 ※ 기존 함수와 형태비교 function getDouble(num) { return num*2; } //화살표 함수 const getDouble = (num) => num*2; ※ 파라미터에 따른 화살표 함수의 형태 const noParam = () => "No Param"; const oneParam = (param) => param ; const multiParam = (paramOne, paramTwo) => paramOne + paramTwo; ※ 파라미터에 따른 화살표 함수(블록을 추가) const noParam = () => { return "No Param"; }; const oneParam = (param) => { return param ; }; const multiParam = (par.. 더보기
[JavaScript] ECMAScript 2015 / ES6 (2) / 클래스(Class) ES6 클래스는 프로토타입 기반 객체지향 패턴을 더 쉽게 사용할 수 있는 대체재이다. 클래스 패턴 생성을 더 쉽고 단순하게 생성할 수 있어서 사용하기도 편하고 상호운용성도 증가된다고 한다. ※ 클래스 생성자 생성자는 constructor 이름을 갖는 특수한 형태의 함수이다. class Timer { //constructor 생성자 constructor(time){ this.time = time; } } ※ 클래스 메소드 class Timer { //constructor 생성자 constructor(time){ this.time = time; } getTime(){ return this.time; } setTime(time){ this.time = time; } } ※ 클래스 인스턴스화 const time.. 더보기
[JavaScript] ECMAScript 2015 / ES6 (1) / var, let, const ECMAScript는 JavaScript 프로그래밍 언어를 정의하는 국제 표준의 기구이다. ECMAScript의 6번째 표준인 ES 2015에서 모던 프로그래밍 요소를 도입해 문법이 혁신적으로 바뀌었고 사용하기 편리해졌다. ※ 변수, 상수선언 (var, let, const) var, let은 변수를 선언하는 키워드이고 const는 상수를 선언하는 키워드이다.var, let은 변수선언 키워드 이므로 값의 재할당이 가능하지만, const는 상수선언 키워드 이므로 값의 재할당이 불가능하다. 또한 const는 선언과 동시에 값을 할당해 줘야 한다. const name = "LEE"; name = "KIM"; //error let name = "LEE"; name = "KIM"; var name = "LEE"; .. 더보기
JPA에서 @Repository에서 쿼리를 사용할 떄 주의할 점 사용쿼리 @Repository public interface AuthRepository extends JpaRepository { Auth findByUserIdAndUserPassword(String userId, String userPassword); @Modifying @Transactional @Query("UPDATE Auth u Set u.token = :refreshToken WHERE u.userId = :userId") void saveRefreshToken(@Param("refreshToken") String refreshToken, @Param("userId") String userId); } 위에서 직접 update 쿼리를 사용하였는데 주의해야할 점이 몇개 있다 1.테이블명이 아닌 .. 더보기
ORM과 JPA에 관하여 ※ ORM(Object Relational Mapping) 객체와 DB의 테이블 매핑을 이루는 것을 말합니다. 좀 더 자세히 말하면 객체형 데이터(Java Object)와 관계형 데이터(Relational DataBase) 사이에서 개념적으로 일치하지 않는 부분을 해결하기 위해 이 둘 사이를 Mapping한 것을 의미합니다. SQL문 작성없이 간단한 매핑설정으로 데이터베이스의 테이블 데이터를 Java 객체로 전달받을 수 있습니다. 예를들어 USER테이블의 데이터를 조회하기 위해서는 SELECT * FROM USER; 라는 쿼리를 실행시켜야 하지만 ORM을 사용하면 USER 테이블과 매핑된 객체를 user라 할 때, user.findAll() 이라는 메서드 호출을 통해 데이터 조회가 가능합니다. 죽 쿼리를.. 더보기