본문 바로가기

분류 전체보기

(27)
[클래스] 1장, 객체지향 기초 - 1편 자, 프랙티컬 C# 이라는 책을 샀어요. 제목부터 간지나죠? 이거 읽으면 C# 잘할 것 같죠? 그래서 샀습니다. 맛보기로 살짝 깔짝대면서 읽어보고 오늘 새롭게 알게된 내용! 지금 정리 시작합니다. 1. 구조체와 클래스의 차이 우선 C#에서 클래스와 구조체를 다루는 방법은 매우 비슷하다. 똑같이 속성과 메소드를 만들어서 사용할 수 있다. 다만 확실하게 드러나는 차이점은 저장공간에 있다. 클래스는 인스턴스로 만들어서 사용할 때 참조형(Reference Type)으로 만들어지고 구조체는 인스턴스로 만들었을 때 값형(Value Type)으로 만들어진다. 그래서 이런 일이 생긴다. 위 코드의 실행 결과가 아래와 같다. 클래스의 경우에는 참조형이기 때문에 myClass2 에서 속성값을 바꿨을때 myClass1에도 ..
[MSSQL] 조인해서 업데이트하고 지우기 CREATE TABLE User ( userNo BIGINT , name NVARCHAR(100) , age INT , email NVARCHAR(256) , inventoryNo BIGINT ) CREATE TABLE Inventory ( inventoryNo BIGINT , amount BIGINT ) 이런 테이블이 있어요 대충 User 라는 테이블에 유저 번호, 이름, 나이, 이메일, 인벤토리 번호가 있고 Inventory 라는 테이블에 인벤토리 번호, 돈! 이 있어요. 누가봐도 User 안의 inventoryNo 는 외래키겠죠? User 테이블과 Inventory 테이블을 조인해서 어떤 유저가 돈을 얼마나 가지고 있는지 알아낼 수 있는 구조라고 해봅시다. 자 이런 상상을 해봅시다. 나는 게임을 만..
[C#] 타입 캐스팅 정말 간단하고 짧고 굵게 알아보는 C# 에서의 캐스팅 !! string a = (string)b; 만약 b가 string 타입이 아닐 경우 InvalidCastException 오류가 발생한다. b가 null 이면 a도 null이 된다. 이 캐스팅은 그냥 안쓰는게 좋다. 걍 없는거라고 생각하자. string a = b as string; 만약 b =가 string 타입이 아니거나 null 이면 a도 null이다. 만약 a가 string타입이 아니고 int, double 같은 value type 변수라면 에러가난다. string a = b.ToString(); b가 null 이면 NullReferenceException 오류가 발생하고, 그 외 b가 어떤 타입이든 a에 값이 할당된다. string a = ..
[MSSQL] 동적 쿼리쿼리 쿼리 ~~ 동적 쿼리에 대해서 알아보자. 왜 알아야하냐면 이거 아주 신박한 기능이거든. 게시글 검색기능을 구현하고 있을 때 였다. 검색 종류가 여러 가지가 있다. 제목으로 검색, 내용으로 검색, 작성자 이름으로 검색. 그래서 프로시저 내에서 분기처리를 했다. 아래 코드는 검색 프로시저의 일부다. @searchType 는 검색 종류, @searchText 는 검색어다. -- 제목으로 검색 IF (@searchType = 1) BEGIN SELECT postIdx, title, content, author FROM PostTable WHERE title LIKE '%' + @searchText + '%' END -- 내용으로 검색 ELSE IF (@searchType = 2) BEGIN SELECT postIdx, t..
[JavaScript] 백엔드가 자바스크립트 때문에 골치아팠던 건에 대하여 자바스크립트는 프론트의 영역인데 왜 백엔드가 이걸 가지고 골 아픈짓을 하고 있는가. 사람은 예술적 감각을 어느정도 갖고 있기 때문에 아무리 백엔드라도 밍밍한 웹을 보면 도저히 신경질 나서 견딜 수가 없다. 그래서 어느 정도 최소한의 인간적인 UI는 구축하고자 스크립트를 짠다. 물론 분업이 프론트엔드와 백엔드 분업이 확실한 상황에서는 그럴 일이 거의 없겠지만 혼자서 공부를 한다거나 토이 프로젝트를 하는 경우에는 반드시 UI를 건드려야만 성이 찬다. 내가 지금 그 상황이다. 그런데 내 주전공이 아닌 자바스크립트 때문에 아주 골아팠던 적이 있다. 알다가도 모를 친구, 자바스크립트... "백엔드가 자바스크립트 때문에 골치아팠던 건에 대하여" 잠시 짚고 넘어갈 필요가 있다. attr() 과 prop() 의 차이..
[C#] 쓰레기 수집가 C# 에는 아주 착한 일을 하는 쓰레기 수집가가 있다. 집 안이 지저분하면 쓰레기들만 쏙쏙 골라서 갖다 버려준다. 이 일을 CLR (Common Language Runtime) 이라는 곳에서 맡아서 하는데, CLR이 뭐냐? 공통 언어 런타임은 마이크로소프트 닷넷 이니셔티브의 가상 머신 구성 요소이다. 프로그램 코드를 위한 실행 환경을 정의하는 마이크로소프트의 공통 언어 기반 표준의 기능이다. 공통 언어 런타임은 공통 중간 언어라고 불리는 바이트코드의 형태를 실행한다. 라고 위키백과에서 그러는데 뭔 소리인지 모르겠고 자바에서 JVM 같은 거라고 한다. 사실 난 JVM도 정확하게 뭔지는 모른다. 다만 우리가 코드를 컴파일하면 그걸 OS가 알아먹을 수 있게 바꿔주는 역할? 이라고 하는데 아무튼 CLR은 C#에..
[PLANtIT] 엘리스 2차 팀프로젝트 회고 조만간 블로그에 정리하자... 하다가 입사와 동시에 까먹어버린 팀프로젝트 회고. 얼마전에 인생회고를 하다가 다시 떠올랐는데 이걸 써야하나 말아야하나 고민을 많이했다. 그러다가 배운게 정말 많았는데 글로 남기지 못하고 지나가 버리는게 너무 억울했던 나머지 결국.. 프로젝트가 끝난지 약 3개월이 지난 지금에야 글을 쓰게 됐다. 프로젝트가 끝났을 당시 원래 쓰려고했던 주제는 크게 Dockerize, HTTPS, Gunicorn 이렇게 3개였는데 예전 계획 따위는 모르겠고 그냥 생각나는대로 적을거다. 1. Notion을 이용한 프로젝트 관리 프로젝트를 한다면 Github의 Wiki에 문서 관리를 하고 Issue로 프로젝트 진행을 관리하는게 보통이다. 나도 지금껏 그래왔다. 근데 우리팀은 프로젝트 관리를 Noti..
[ASP.NET] 닷넷에서 외부공격을 막는 법 (CSRF, JSON Hijacking) 웹 서버를 운영하다 보면 외부로부터 악의적인 공격을 막아야한다는 사명감이 생기게 된다. 안생긴다면 개발자가 아니다. 그렇다고해서 백엔드 개발자가 보안전문가 마냥 모든 공격에 대비하기에는 보안이라는 영역이너무 범위가 넓다. 그래서 닷넷에서는 "요정도만은 신경 써줘~" 라는 뜻에서 만들어준 보안 기능이 있다. (그냥 내생각이다) 이번에 공부해온 기능은 2개의 공격을 막을 수 있다. CSRF과 JSON Hijacking 이다. 먼저 CSRF가 뭔지 알아야 하는데 Cross Site Request Forgery 의 약자다. 위키백과에서의 정의는 이렇다. 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. 사용자의 신분을 속여서 악의적..