해외생활이야기2017. 8. 27. 14:29

[JOBINTERVIEW]자주 묻는 자바 인터뷰 2 FAQ(Frequently Asked Questions)



자바 잡 인터뷰에서 자주 묻는 질문과 답변 두번째 번역입니다.

Top Java Frequently Asked Questions- 2


51. Are true and false keywords? 

true 및 false 값은 키워드입니까?

The values true and false are not keywords. 

true 및 false 값은 키워드가 아닙니다.


52. What is a void return type? 

무효 반환 유형(void return type)이란 무엇입니까?

A void return type indicates that a method does not return a value after its execution. 

void return type은 메서드 실행 후 값을 반환하지 않음을 나타냅니다.


53. What is the difference between the File and RandomAccessFile classes? 

File과 RandomAccessFile 클래스의 차이점은 무엇입니까?

The File class encapsulates the files and directories of the local file system. The RandomAccessFile class provides the methods needed to directly access data contained in any part of a file. 

File 클래스는 로컬 파일 시스템의 파일과 디렉토리를 캡슐화합니다. RandomAccessFile 클래스는 파일의 모든 부분에 포함 된 데이터에 직접 액세스하는 데 필요한 메서드를 제공합니다.


54. Which package is always imported by default? 

기본적(default)로 항상 가져 오는 패키지는 무엇입니까?

The java.lang package is always imported by default in all Java Classes.

java.lang 패키지는 기본적으로 모든 Java 클래스에서 가져옵니다. 


55. What restrictions are placed on method overriding? 

method overriding 재정의에는 어떤 제한이 있습니까?

Overridden methods must have the same name, argument list, and return type. The overriding method may not limit the access of the method it overrides but it can expand it. The overriding method may not throw any exceptions that are not thrown by the overridden method. 

Overridden methods는 name, argument list 및 return type이 동일해야합니다. 오버라이드 (override)하는 메소드는 오버라이드 (override)하는 메소드의 액세스를 제한하지 않고 확장 할 수 있습니다. 오버라이드 (override)되는 메소드는, 오버라이드 (override) 된 메소드에 의해 슬로우되지 않는 예외를 throw하지 않습니다.


56. Which arithmetic operations can result in the throwing of an ArithmeticException? 

어떤 arithmetic operations이 ArithmeticException을 던질 수 있습니까?

Integer / and % can result in the throwing of an ArithmeticException. 

정수 /와 %는 ArithmeticException을 던질 수 있습니다.


57. What is the ResourceBundle class? 

ResourceBundle 클래스 란 무엇입니까?

The ResourceBundle class is used to store locale-specific resources that can be loaded by a program to tailor the program's appearance to the particular locale in which it is being run. 

ResourceBundle 클래스는, 프로그램의 외관을 실행하고있는 특정의 로케일에 맞추기 위해서, 프로그램에 의해로드 할 수있는 로케일 고유의 리소스를 포함하기 위해서 사용됩니다.


58. What is numeric promotion? 

numeric promotion이란 무엇입니까?

Numeric promotion is the conversion of a smaller numeric type to a larger numeric type, so that integer and floating-point operations may take place. In numerical promotion, byte, char, and short values are converted to int values. The int values are also converted to long values, if necessary. The long and float values are converted to double values, as required. 

Numeric promotion은 더 작은 숫자 유형을 더 큰 숫자 유형으로 변환하므로 정수 및 부동 소수점 연산이 발생할 수 있습니다. numerical promotion에서는 byte, char 및 short 값이 int 값으로 변환됩니다. 필요한 경우 int 값도 long 값으로 변환됩니다. long 및 float 값은 필요에 따라 double 값으로 변환됩니다.


59. To what value is a variable of the boolean type automatically initialized? 

boolean type의 변수가 자동으로 초기화되는 값은 무엇입니까?

The default value of the boolean type is false. 

boolean type의 기본값(default)은 false입니다.


60. What is the difference between the prefix and postfix forms of the ++ operator? 

++ 연산자의 접두사(prefix)와 접미사(postfix) 형식의 차이점은 무엇입니까?

The prefix form performs the increment operation and returns the value of the increment operation. The postfix form returns the current value to the expression and then performs the increment operation on that value. 

prefix form은 증가 조작을 수행하고 증가 조작의 값을 리턴합니다. postfix form은 현재 값을 표현식으로 리턴 한 다음 해당 값에 대해 증가 조작을 수행합니다.


61. What is the purpose of a statement block? 

statement block의 목적은 무엇입니까?

A statement block is used to organize a sequence of statements as a single statement group. 

statement block은 명령문 시퀀스를 single statement group으로 구성하는 데 사용됩니다.


62. What is the difference between an if statement and a switch statement? 

if 문과 switch 문의 차이점은 무엇입니까?

The if statement is used to select among two alternatives. It uses a boolean expression to decide which alternative should be executed. The switch statement is used to select among multiple alternatives. It uses an int expression to determine which alternative should be executed. 

A Switch statement with 5 Case blocks can be compared to an if statement with 5 else-if blocks. 

if 문은 두 가지 대안 중에서 선택하는 데 사용됩니다. boolean 표현식을 사용하여 어떤 대안을 실행할지 결정합니다. switch 문은 여러 대안 중에서 선택하는 데 사용됩니다. int 식을 사용하여 어떤 대안을 실행해야하는지 결정합니다.

5 개의 Case 블록이있는 Switch 문은 5 개의 else-if 블록이있는 if 문과 비교할 수 있습니다.


63. What do you mean by object oreiented programming 

객체 지향 프로그래밍이란 무엇을 의미합니까?

In object oreinted programming the emphasis is more on data than on the procedure and the program is divided into objects. Some concepts in OO Programming are: 

* The data fields are hidden and they cant be accessed by external functions. 

* The design approach is bottom up. 

* The Methods operate on data that is tied together in data structure 

객체 지향 프로그래밍에서 강조는 프로 시저보다 데이터에 더 중점을 두며 프로그램은 객체로 나뉩니다. OO 프로그래밍의 몇 가지 개념은 다음과 같습니다.

* 데이터 필드는 숨겨져 있으며 외부 함수를 통해 액세스 할 수 없습니다.

* 디자인 접근법은 상향식입니다.

* 메서드는 데이터 구조에서 함께 묶인 데이터에서 작동합니다.


64. What are 4 pillars of object oreinted programming 

object oreinted 프로그래밍의 4 가지 핵심 요소는 무엇입니까?

1. Abstraction - It means hiding the details and only exposing the essentioal parts 

2. Polymorphism - Polymorphism means having many forms. In java you can see polymorphism when you have multiple methods with the same name 

3. Inheritance - Inheritance means the child class inherits the non private properties of the parent class 

4. Encapsulation - It means data hiding. In java with encapsulate the data by making it private and even we want some other class to work on that data then the setter and getter methods are provided 

1. 추상화 - 세부 사항을 숨기고 본질적인 부분 만 드러내는 것을 의미합니다.

2. 다형성 - 다형성은 여러 형태를 갖는 것을 의미합니다. 자바에서는 동일한 이름을 가진 여러 메소드가있을 때 다형성을 볼 수 있습니다.

3. 상속 - 상속은 자식 클래스가 부모 클래스의 비공개 속성을 상속 받음을 의미합니다.

4. 캡슐화 - 데이터 숨기기를 의미합니다. 자바에서는 데이터를 비공개로 캡슐화하고 심지어 다른 클래스가 해당 데이터에서 작업하기를 원한다면 setter 및 getter 메소드가 제공됩니다.


65. Difference between procedural and object oreinted language 

절차 적 언어와 객체 언어의 차이점

In procedural programming the instructions are executed one after another and the data is exposed to the whole program 

In Object Oriented programming the unit of program is an object which is nothing but combination of data and code and the data is not exposed outside the object 

절차 형 프로그래밍에서 명령어는 차례로 실행되고 데이터는 전체 프로그램에 노출됩니다

객체 지향 프로그래밍에서 프로그램 단위는 데이터와 코드의 조합에 지나지 않으며 객체 외부에 노출되지 않는 객체입니다


66. What is the difference between parameters and arguments 

매개 변수(parameters)와 인수(arguments)의 차이점은 무엇입니까?

While defining method, variables passed in the method are called parameters. While using those methods, values passed to those variables are called arguments. 

메서드를 정의하는 동안이 메서드에서 전달 된 변수를 매개 변수라고합니다. 이러한 메소드를 사용하는 동안 이러한 변수에 전달 된 값을 인수라고합니다.


67. What is reflection in java 

자바에서 reflection이란 무엇입니까?

Reflection allows Java code to discover information about the fields, methods and constructors of loaded classes and to dynamically invoke them. The Java Reflection API covers the Reflection features. 

Reflection은 Java 코드가 로드 된 클래스의 필드, 메소드 및 생성자에 대한 정보를 발견하고 동적으로 호출하도록 허용합니다. Java Reflection API는 Reflection 기능을 다룹니다.


68. What is a cloneable interface and how many methods does it contain 

cloneable 인터페이스 란 무엇이며 얼마나 많은 메소드에 포함되어 있습니까?

The cloneable interface is used to identify objects that can be cloned using the Object.clone() method. It is a Tagged or a Marker Interface and hence it does not have any methods. 

cloneable 인터페이스는 Object.clone () 메서드를 사용하여 복제 할 수있는 객체를 식별하는 데 사용됩니다. 이것은 Tagged 또는 Marker Interface이므로 어떠한 메소드도 가지고 있지 않습니다.


69. What is the difference between Java Bean and Java Class

Java Bean과 Java 클래스의 차이점은 무엇입니까?

Basically a Bean is a java class but it has getter and setter method and it does not have any logic in it

기본적으로 Bean은 Java 클래스이지만 getter 및 setter 메서드가 있으며 논리가 없으므로 데이터 보유에 사용됩니다.

반면에 Java 클래스는 Java Bean의 내용을 가질 수 있으며 내부에 일부 논리를 포함합니다.


70. What are null or Marker interfaces in Java ?

Java에서 null 또는 Marker 인터페이스 란 무엇입니까?

The null interfaces or marker interfaces or Tagged Interfaces, do not have method declarations in them. They are empty interfaces, this is to convey the compiler that they have to be treated differently 

null interfaces 또는 marker interfaces 또는 Tagged Interfaces 메소드 선언이 없습니다. 그들은 빈 인터페이스이며, 이것은 다르게 취급되어야하는 컴파일러를 전달하는 것입니다.


71. Does java Support multiple inheritance ?

Java가 다중 상속을 지원합니까?

Java does not support multiple inheritance directly like C++, because then it is prone to ambiguity, example if a class extends 2 other classes and these 2 parent classes have same method names then there is ambiguity. Hence in Partial Java Multiple inheritance is supported using Interfaces 

Java는 C ++과 같은 다중 상속을 지원하지 않습니다. 왜냐하면 클래스가 다른 2 개의 클래스를 확장하고 이러한 2 개의 부모 클래스가 동일한 메소드 이름을 갖고 모호한 경우 예를 들어 애매하게되기 쉽기 때문입니다. 그러므로 부분 Java에서 인터페이스를 사용하여 다중 상속이 지원됩니다.


72. What are virtual function ?

virtual function이란 무엇입니까?

In OOP when a derived class inherits from a base class, an object of the derived class may be referred to (or cast) as either being the base class type or the derived class type. If there are base class functions overridden by the derived class, a problem then arises when a derived object has been cast as the base class type. When a derived object is referred to as being of the base's type, the desired function call behavior is ambiguous. 

The distinction between virtual and not virtual is provided to solve this issue. If the function in question is designated "virtual" then the derived class's function would be called (if it exists). If it is not virtual, the base class's function would be called. 

파생 클래스가 기본 클래스에서 상속되는 OOP에서 파생 클래스의 개체는 기본 클래스 형식 또는 파생 클래스 형식으로 참조 (또는 형 변환) 될 수 있습니다. 파생 클래스에 의해 재정의 된 기본 클래스 함수가있는 경우 파생 개체가 기본 클래스 유형으로 캐스팅 된 경우 문제가 발생합니다. 파생 된 객체가 기본 유형으로 참조되면 원하는 함수 호출 동작이 모호합니다.

이 문제를 해결하기 위해 가상과 가상의 구별이 제공됩니다. 해당 함수가 "가상"으로 지정된 경우 파생 클래스의 함수가 호출됩니다 (있는 경우). 가상 클래스가 아닌 경우 기본 클래스의 함수가 호출됩니다.


73. Does java support virtual functions ?

Java는 가상 함수를 지원합니까?

No java does not support virtual functions direclty like in C++, but it supports using Abstract class and interfaces 

C ++과 같이 virtual functions direclty를 지원하지 않는 Java는 없지만 Abstract 클래스 및 인터페이스 사용을 지원합니다.


74. What is JVM ?

JVM이란 무엇입니까?

When we install a java package. It contains 2 things 

* The Java Runtime Environment (JRE) 

* The Java Development Kit (JDK) 

The JRE provides runtime support for Java applications. The JDK provides the Java compiler and other development tools. The JDK includes the JRE. 

Both the JRE and the JDK include a Java Virtual Machine (JVM). This is the application that executes a Java program. A Java program requires a JVM to run on a particular platform 

우리가 자바 패키지를 설치할 때. 그것은 2 가지를 포함합니다.

* 자바 런타임 환경 (JRE)

* Java Development Kit (JDK)

JRE는 Java 응용 프로그램에 대한 런타임 지원을 제공합니다. JDK는 Java 컴파일러 및 기타 개발 도구를 제공합니다. JDK에는 JRE가 포함되어 있습니다.

JRE와 JDK는 JVM (Java Virtual Machine)을 포함합니다. 이것은 Java 프로그램을 실행하는 응용 프로그램입니다. Java 프로그램을 사용하려면 특정 플랫폼에서 JVM을 실행해야합니다.


75. What is the difference between Authentication and Authorization ?

인증(Authentication)과 권한 부여(Authorization)의 차이점은 무엇입니까?

Authentication is a process for verifying that an individual is who they say they are. Authorization is an additional level of security, and it means that a particular user (usually authenticated), may have access to a particular resource say record, file, directory or script. 

인증(Authentication)은 개인이 자신이 말하는 사람인지 확인하는 프로세스입니다. 권한 부여(Authorization)은 추가 보안 수준이며 특정 사용자 (대개 인증 된 사용자)가 레코드, 파일, 디렉토리 또는 스크립트와 같은 특정 리소스에 액세스 할 수 있음을 의미합니다.


76. What types of values does boolean variables take ?

boolean 변수는 어떤 유형의 값을 취합니까?

It only takes values true and false. 

그것은 참(true)과 거짓(false) 만 값을 취합니다.


77. Which primitive datatypes are signed ?

어떤 primitive 데이터 타입이 signed 되었는가?

All primitive datatypes are signed except char and Boolean

모든 primitive 데이터 유형은 char 및 Boolean을 제외하고 signed 됩니다.


78. Is char type signed or unsigned ?

char 타입이 signed 또는 unsigned입니까?

char type is integral but unsigned. It range is 0 to 2^7-1

char type은 필수이지만 부호가 없습니다. 범위는 0 ~ 2 ^ 7-1입니다.


79. What forms an integral literal can be ?

integral literal를 형성하는 것은 무엇일 수 있습니까?

decimal, octal and hexadecimal, hence example it can be 28, 034 and 0x1c respectively 

10 진수, 8 진수 및 16 진수이므로 예를 들어 28, 034 및 0x1c가 될 수 있습니다


80. Why is the main method static ?

왜 main method는 static 입니까?

So that it can be invoked without creating an instance of that class 

그 클래스의 인스턴스를 생성하지 않아도 호출 될 수 있습니다.


81. What is the difference between class variable, member variable and automatic(local) variable 

클래스 변수, 멤버 변수 및 자동 (로컬) 변수의 차이점은 무엇입니까?

class variable is a static variable and does not belong to instance of class but rather shared across all the instances of the Class. 

member variable belongs to a particular instance of class and can be called from any method of the class 

automatic or local variable is created on entry to a method and is alive only when the method is executed

class 변수는 정적 변수이며 클래스의 인스턴스에 속하지 않지만 클래스의 모든 인스턴스에서 공유됩니다.

member 변수는 클래스의 특정 인스턴스에 속하며 클래스의 모든 메서드에서 호출 할 수 있습니다.

automatic 또는 local 변수는 메소드 진입시 작성되며 메소드가 실행될 때만 활성화됩니다.


82. When are static and non static variables of the class initialized ?

클래스의 정적 및 비 정적 변수는 언제 초기화됩니까?

The static variables are initialized when the class is loaded

Non static variables are initialized just before the constructor is called 

정적 변수는 클래스가 로드 될 때 초기화됩니다.

static이 아닌 변수는 생성자가 호출되기 바로 전에 초기화됩니다.


83. How is an argument passed in java, is it by copy or by reference? 

자바에서 전달되는 인수는 copy 또는 reference로 어떻게 전달됩니까?

If the variable is primitive datatype then it is passed by copy. 

If the variable is an object then it is passed by reference 

변수가 primitive 데이터 유형이면 사본으로 전달됩니다.

변수가 object이면 참조로 전달됩니다.


84. How does bitwise (~) operator work ?

비트 연산자 (~)는 어떻게 작동합니까?

It converts all the 1 bits in a binary value to 0s and all the 0 bits to 1s, e.g 11110000 gets coverted to 00001111 

이진 값의 모든 1 비트를 0으로 변환하고 0 비트를 모두 1로 변환합니다. 예를 들어, 11110000은 00001111


85. Can shift operators be applied to float types ?

연산자를 부동 소수점 형에 적용 할 수 있습니까?

No, shift operators can be applied only to integer or long types (whole numbers)

아니요, shift 연산자는 정수 또는 긴 유형 (정수)에만 적용 할 수 있습니다.


86. What happens to the bits that fall off after shifting ?

shifting 후 떨어지는 비트는 어떻게됩니까?

They are discarded (ignored)

그것들은 무시됩니다 (무시 됨).


87. What are the rules for overriding ?

무시하는 규칙은 무엇입니까?

The rules for Overriding are: Private method can be overridden by private, protected or public methods Friendly method can be overridden by protected or public methods Protected method can be overridden by protected or public methods Public method can be overridden by public method 

Overriding의 규칙은 다음과 같습니다. Private method는 private, protected 또는 public methods로 재정의 할 수 있습니다. Friendly method는 protected 메서드 또는 public 메서드로 재정의 할 수 있습니다. Protected 메서드는 protected 메서드 나 public 메서드로 overridden 할 수 있습니다. Public 메서드는 public 메서드로 재정의 할 수 있습니다.


88. Explain the final Modifier ?

final Modifier를 설명 하시겠습니까?

Final can be applied to classes, methods and variables and the features cannot be changed. Final class cannot be subclassed, methods cannot be overridden 

final은 클래스, 메서드 및 변수에 적용 할 수 있으며 기능을 변경할 수 없습니다. Final 클래스는 subclassed로 만들 수 없으며 메서드를 overridden 할 수 없습니다.


89. Can you change the reference of the final object ?

final 객체의 reference를 변경할 수 있습니까?

No the reference cannot be changed, but the data in that object can be changed 

reference를 변경할 수는 없지만 해당 객체의 데이터는 변경할 수 있습니다.


90. Can abstract modifier be applied to a variable ?

abstract modifier를 변수에 적용 할 수 있습니까?

No it can be applied only to class and methods 

아니요. 클래스와 메소드에만 적용 할 수 있습니다.


91. Where can static modifiers be used ?

static modifiers를 어디에서 사용할 수 있습니까?

They can be applied to variables, methods and even a block of code, static methods and variables are not associated with any instance of class 

그것들은 변수, 메소드 및 심지어 코드 블록에도 적용될 수 있습니다. 정적 메소드 및 변수는 클래스의 모든 인스턴스와 연관되지 않습니다.


92. When are the static variables loaded into the memory 

정적 변수는 언제 메모리에 로드됩니까?

During the class load time 

class 로딩 시간 동안


93. When are the non static variables loaded into the memory ?

non static 변수는 언제 메모리에 로드 됩니까?

They are loaded just before the constructor is called 

생성자가 호출되기 바로 전에로드됩니다.


94. How can you reference static variables ?

정적 변수(static variables)를 어떻게 참조 할 수 있습니까?

You can refer to static variables directly using the class name and you dont need any object instance for it. 

Ex: ClassTest.execMethod(); can be used to access the execMethod() method of the class ClassTest

클래스 이름을 사용하여 정적 변수를 직접 참조 할 수 있으며 그 대신 객체 인스턴스가 필요하지 않습니다.

예 : ClassTest.execMethod (); ClassTest 클래스의 execMethod () 메서드에 액세스하는 데 사용할 수 있습니다.


95. Can static method use non static features of there class ?

정적 메서드는 클래스의 정적이 아닌 기능을 사용할 수 있습니까?

No they are not allowed to use non static features of the class, they can only call static methods and can use static data 

클래스의 정적이 아닌 기능을 사용할 수 없으며 정적 메서드 만 호출 할 수 있고 정적 데이터를 사용할 수 있습니다.


96. What is static initializer code ?

static initializer code 란 무엇입니까?

A class can have a block of initializer code that is simply surrounded by curly braces and labeled as static e.g. 

public class Test{ 

static int =10; 

static{ 

System.out.println("Hiiiiiii"); 

And this code is executed exactly once at the time of class load 

클래스는 중괄호로 둘러싸여 있고 static으로 레이블이 지정된 초기화 코드 블록을 가질 수 있습니다.

public class Test{ 

static int =10; 

static{ 

System.out.println("Hiiiiiii"); 

그리고이 코드는 클래스를로드 할 때 정확히 한 번 실행됩니다.


97. Where is native modifier used? 

native modifier는 어디에 사용됩니까?

It can refer only to methods and it indicates that the body of the method is to be found else where and it is usually written in language other than Java. 

메서드에만 참조 할 수 있으며 메서드의 본문을 찾을 수 있음을 나타냅니다. 일반적으로 Java 이외의 다른 언어로 작성됩니다.


98. When do you use continue and when do you use break statements ?

언제 continue를 사용합니까? 그리고 언제 break 문을 사용합니까?

When continue statement is applied it prematurely completes the iteration of a loop. 

When break statement is applied it causes the entire loop to be abandoned. 

continue 문을 적용하면 조기에 루프 반복이 완료됩니다.

break 문이 적용되면 전체 루프가 포기됩니다.


99. What do you understand by late binding or virtual method Invocation ?

late binding 또는  virtual method Invocation로 무엇을 이해합니까?

When a compiler for a non object oriented language comes across a method invocation, it determines exactly what target code should be called and build machine language to represent that call. In an object oriented language, this is not possible since the proper code to invoke is determined based upon the class if the object being used to make the call, not the type of the variable. Instead code is generated that will allow the decision to be made at run time. This delayed decision making is called as late binding 

비 객체 지향 언어를 위한 컴파일러가 메소드 호출을 가로 질러 오면, 정확히 어떤 타겟 코드가 호출되어야 하는지를 결정하고 그 호출을 표현하기위한 기계어를 빌드한다. 객체 지향 언어에서는 호출 할 적절한 코드가 변수의 형식이 아니라 호출하는 데 사용되는 경우 클래스를 기반으로 결정되기 때문에 가능하지 않습니다. 대신 런타임에 결정을 내릴 수있는 코드가 생성됩니다. 지연된 의사 결정은 지연 바인딩이라고합니다.


100. Can Overridden methods have different return types ?

오버라이드 된 메소드가 다른 return types을 가질 수 있습니까?

No they cannot have different return types 

다른 return types을 사용할 수 없습니다.


101. If the method to be overridden has access type protected, can subclass have the access type as private 

재정의 할 메소드에 액세스 유형이 protected 인 경우, 서브 클래스는 private로 액세스 유형을 가질 수 있습니다.

No, it must have access type as protected or public, since an overriding method must not be less accessible than the method it overrides 

아니요, 오버라이드하는 메소드가 오버라이드하는 메소드보다 덜 액세스 할 수 없으므로 액세스 유형이 protected 또는 public이어야합니다.


102. What are the Final fields & Final Methods ? 

최종 필드 및 최종 방법은 무엇입니까?

Fields and methods can also be declared final. A final method cannot be overridden in a subclass. A final field is like a constant: once it has been given a value, it cannot be assigned again.

필드와 메소드도 final로 선언 할 수 있습니다. 서브 클래스에서는 최종 메소드를 오버라이드 할 수 없습니다. 마지막 필드는 상수와 같습니다. 일단 값이 주어지면 다시 할당 할 수 없습니다.


원문출처 : http://java4732.blogspot.kr/2014/09/qus-write-program-to-calculate-largest.html



Posted by Joseph514
해외생활이야기2017. 8. 18. 17:24

-[JOBINTERVIEW]자주하는 Web Developer Interview Questions & Answers


이번에는 자주 사용하는 질문 뿐 아니라, 답변도 같이 적어보겠습니다.


TOP 17이라고 적혀잇는데, 정작보면 15개이고, 마지막 15번째 문제는 무슨말인지 만들다가 말았더군요.

아마 HTML에서 DIV와 Frame사이의 차이점을 이야기하는것같았습니다.


자주하는 웹 개발자 인터뷰 질문 및 답변


1) Explain what are the key responsibilities of a Web Developer?

웹 개발자의 주요 책임은 무엇인지 설명하십시오.


-Program test and debug all web applications

-Design, develop, test and deploy web applications

-Uploading sites onto server and registering it with different search engines

-Coordinate with other designers and programmers to develop web projects

-Fix bugs, troubleshoot and resolve problems

-In case of system failure initiate periodic testing and implement contingency plans

-Develop appropriate code structures to solve specific tasks

-Support and assist in the upkeep and maintenance of websites

-Assume ownership of code throughout staging, development, testing and production


-프로그램 테스트 및 모든 웹 응용 프로그램 디버깅

-웹 애플리케이션의 설계, 개발, 테스트 및 전개

-서버에 사이트 업로드 및 다른 검색 엔진에 등록

-다른 디자이너 및 프로그래머와 협력하여 웹 프로젝트 개발

-버그 수정, 문제 해결 및 문제 해결

-시스템 장애가 발생할 경우 정기적 인 테스트를 시작하고 비상 계획을 수립하십시오

-특정 작업을 해결하는 적절한 코드 구조 개발

-웹 사이트 유지 및 유지 보수 지원 및 지원

-준비, 개발, 테스트 및 생산 과정에서 코드 소유권을 주장합니다.


2) What web developer should know?

웹 개발자는 무엇을 알아야합니까?


A good web developer should know

웹개발자는 알아야합니다.

HTML

CSS

SQL

PHP/Ruby/Python

JQuery

JavaScript


3) Explain what is CORS? How does it work?

CORS가 무엇인지 설명하십시오. 어떻게 작동합니까?

(CORS) Cross-Origin Resource Sharing is a mechanism that enables many resources (e.g.,JavaScript, fonts etc.) on a web page to be requested from another domain outside the domain from which the resource originated. 

It is a mechanism supported in HTML5 that manages XMLHttpRequest access to a domain different.

(CORS) Cross-Origin Resource Sharing은 웹 페이지의 많은 리소스 (예 : JavaScript, 글꼴 등)를 리소스가 생성 된 도메인 외부의 다른 도메인에서 요청할 수있게하는 메커니즘입니다. 

HTML5에서 지원되는 메커니즘으로 다른 도메인에 대한 XMLHttpRequest 액세스를 관리합니다.


4) List out the advantage of HTTP/2 as compared with HTTP 1.1?

HTTP 1.1과 비교하여 HTTP / 2의 이점을 나열하십시오.


The advantage of HTTP/2 compared to HTTP/1.1 is

-HTTP headers data compression

-Server push technologies

-Over a single TCP connection parallel loading of page elements

-Prioritization of request

HTTP / 1.1에 비해 HTTP / 2의 장점은

-HTTP 헤더 데이터 압축

-서버 푸시 기술

-단일 TCP 연결을 통해 페이지 요소의 병렬로드

-요청의 우선 순위 지정


5) Explain what is an ETag and how does it work?

ETag는 무엇인지 설명하고 어떻게 작동합니까?


An ETag is an opaque identifier allocated by a web server to a specific version of a resource found at a URL. 

The ETag is a part of HTTP, the protocol for the world wide web and when the server reads the ETag from client request, the server can then tell whether to send the file (HTTP 200) or tell the client just to use their local copy (HTTP 304).

ETag는 웹 서버가 URL에서 찾은 특정 버전의 리소스에 할당되는 불투명 한 식별자입니다. 

ETag는 월드 와이드 웹의 프로토콜 인 HTTP의 일부이며, 서버가 클라이언트 요청에서 ETag를 읽을 때 서버는 파일 (HTTP 200)을 전송할지 클라이언트에게 로컬 복사본을 사용할지 여부를 알릴 수 있습니다 (HTTP 304).


6) Explain what is long polling?

long polling이 무엇인지 설명하십시오.


Long polling is a web application development pattern used to emulate pushing data from the server to the client. 

When the long polling is used, the client sends a request to the server, and the connection remains intact until the server is ready to send data to the client. The connection will be closed only after the data is sent back to the client or connection timeout occurs.

long polling은 서버에서 클라이언트로 데이터를 에뮬레이트하기 위해 사용되는 웹 애플리케이션 개발 패턴입니다. 

long polling이 사용되면 클라이언트는 서버에 요청을 보내고 서버는 클라이언트에 데이터를 보낼 준비가 될 때까지 연결을 그대로 유지합니다. 데이터가 클라이언트로 다시 전송되거나 연결 시간 초과가 발생한 후에만 연결이 닫힙니다.


7) Explain what is DTD (Document Type Declaration)? Mention what is the difference between CDATA and PCDATA in DTD?

DTD (Document Type Declaration) 란 무엇입니까? DTD에서 CDATA와 PCDATA의 차이점은 무엇입니까?


A DTD means Document Type Definition (DTD) which defines the structure, legal elements and attributes of an XML document.

PCDATA: A PCDATA is a Parsed Character Data. XML parsers usually parse all the

text in an XML document.

CDATA: While CDATA is an Unparsed Character Data, the term CDATA is used about

text data that should not be parsed by the XML parser.

DTD는 XML 문서의 구조, 적법 요소 및 속성을 정의하는 DTD (Document Type Definition)를 의미합니다.

PCDATA : PCDATA는 구문 분석 된 문자 데이터입니다. XML 파서는 일반적으로 모든

XML 문서의 텍스트.

CDATA : CDATA는 분석되지 않은 문자 데이터이지만 CDATA라는 용어는

XML 파서가 구문 분석해서는 안되는 텍스트 데이터


8) Mention some tips you can use to reduce the load time of a web application that you have written?

작성한 웹 응용 프로그램의로드 시간을 줄이기 위해 사용할 수있는 몇 가지 팁을 언급합니까?


To decrease the load time of a web application you have to follow the following tips


-Optimize images to no longer than screen resolution and save it as a compressed file

-Eliminate all JavaScript files to reduce the amount of transferable data

-Combine & Mininify all CSS and JS and call them in footer

-Defer or Asynch JS Files


웹 응용 프로그램의로드 시간을 줄이려면 다음 팁을 따라야합니다.


-이미지를 화면 해상도보다 더 이상 최적화하지 말고 압축 파일로 저장하십시오.

- 전송 가능한 데이터 양을 줄이기 위해 모든 JavaScript 파일을 추출하십시오.

-모든 CSS와 JS를 깔끔하게 정리하고 꼬리말로 호출

-Defer 또는 Asynch JS 파일


9) Mention what is the correct way to include JavaScript into your HTML?

HTML에 JavaScript를 포함시키는 올바른 방법은 무엇입니까?


The correct way to include JavaScript into your HTML is by using inline event handlers or inline code.

자바 스크립트를 HTML에 포함시키는 올바른 방법은 인라인 이벤트 핸들러 또는 인라인 코드를 사용하는 것입니다.


10) Explain in CSS, how can you make a form element's background color change when the user is entering text? Does this work in all browsers?

CSS에서 설명합니다. 사용자가 텍스트를 입력 할 때 양식 요소의 배경색을 어떻게 바꿀 수 있습니까? 이 기능이 모든 브라우저에서 작동합니까?


Yes, you can change the default look of form elements by styling their HTML tags: input, select and textarea. but it won’t work for all browsers.

예, HTML 태그의 스타일을 지정하여 양식 요소의 기본 모양을 변경할 수 있습니다 (input, select 및 textarea). 그러나 모든 브라우저에서 작동하지는 않습니다.


11) Explain what is the difference between cookies and local storage?

쿠키와 로컬 스토리지의 차이점은 무엇입니까?


-Client Side/Server Side 

Cookies : Data accessible both at client side and server side. The data is sent to the serverside with every cookie request.

Local Storage : Only at the local browser side data is accessible. Server cannot use local storage until deliberately sent a request to the server via POST or GET

-Size

Cookies : Storage capacity of cookies is 4095 bytes/cookie

Local Storage : Storage capacity of local storage is 5MB per domain

-Expiration

Cookies : Cookies have expiration and cookie data gets deleted after some time

Local Storage : There is no expiration and has to remove manually


-클라이언트 측 / 서버 측

쿠키 : 클라이언트 측과 서버 측에서 모두 액세스 할 수있는 데이터입니다. 데이터는 모든 쿠키 요청과 함께 서버 측으로 전송됩니다.

로컬 저장소 : 로컬 브라우저에서만 데이터에 액세스 할 수 있습니다. 서버는 의도적으로 POST 또는 GET을 통해 서버에 요청을 보낼 때까지 로컬 저장소를 사용할 수 없습니다.

-크기

쿠키 : 쿠키의 저장 용량 = (4095바이트/쿠키)입니다.

로컬 저장소 : 로컬 저장소의 저장소 용량은 도메인 당 5MB입니다.

-만료 시

쿠키 : 쿠키의 유효 기간이 만료되고 잠시 후 쿠키 데이터가 삭제됩니다

로컬 저장소 : 만료가 없으며 수동으로 제거해야 합니다.


12) In HTML what tag can be used for a multi-line text input control?

HTML에서 다중 라인 텍스트(multi-line text) 입력 컨트롤을 위해 사용할 수 있는 태그는 무엇입니까?


For multi-line text input control, you can use the “textarea tag”.

여러 줄 텍스트 입력 컨트롤의 경우 "textarea 태그"를 사용할 수 있습니다.


13) Explain how can you refer to CSS file in the web page?

웹 페이지에서 CSS 파일을 어떻게 참조 할 수 있는지 설명하십시오.


You can refer to the .CSS file in the webpage by using the tag. It should be kept between tag.

태그를 사용하여 웹 페이지의 .CSS 파일을 참조 할 수 있습니다. 태그 사이에 보관해야 합니다.


14) List out few ways you can reduce page load time?

페이지 로드 시간을 줄일 수 있는 몇 가지 방법을 나열하십시오.


You can do following things to reduce the page load time


Reduce image size

Remove unnecessary widgets

HTTP compression

Placing CSS at the top and script reference at the bottom or in external files

Reduce lookups

Minimize redirects

Caching,


페이지 로드 시간을 줄이려면 다음을 수행 할 수 있습니다.


이미지 크기 줄이기

불필요한 위젯 제거

HTTP 압축

상단에 CSS를 배치하고 맨 아래 또는 외부 파일에 스크립트 참조

lookups 축소

redirects 최소화

캐싱


출처 : https://career.guru99.com/top-17-web-developer-interview-questions/


Posted by Joseph514
해외생활이야기2017. 8. 18. 16:03

-[JOBINTERVIEW]몇가지의 코딩인터뷰 질문 번역해봤습니다.

제가 영어가 짧아고 Ruby나 파이썬은 익숙하지 않아서 좀 번역이 시원찮네요.

일단 Cover-letter와 Resume가 중요해야겠지만, 대략적으로 어떤 질문을 하는지 좀 알아봐야 될거 같네요.

필요하시다면 참고 해보시기 바랍니다.


Coding interview questions


-Java

How are Runtime exceptions different from Checked exceptions?

Runtime exceptions는 Checked exceptions와 어떻게 다릅니까?


Why use an object Factory and how would you implement the Singleton pattern?

왜 object Factory를 사용해야하고 어떻게 Singleton pattern을 구현하겠습니까?


Is this possible in Java? “A extends B, C”

자바로 가능합니까? "A 확장 B, C"


What is difference between String, StringBuilder and StringBuffer in Java?

자바에서 String, StringBuilder 및 StringBuffer의 차이점은 무엇입니까?


-Ruby

What is the use of load and require in Ruby?

Ruby에서 사용되는 load and require 무엇입니까?


Explain each of the following operators and how and when they should be used: ==, ===, eql?, equal?

다음 연산자 각각과 언제 어떻게 사용해야하는지 설명하십시오 : ==, ===, eql?, equal?


What is a module? Can you tell me the difference between classes and modules?

모듈이란 무엇입니까? 클래스와 모듈의 차이점을 알려주시겠습니까?


What are some of your favorite gems?

좋아하는 gems에는 어떤 것들이 있습니까?


-Python

Why are functions considered first class objects in Python?

파이썬에서 functions가 first class objects로 간주되는 이유는 무엇입니까?


Can you explain circular dependencies in Python and potential ways to avoid them?

파이썬에서의 순환 의존성과 그것들을 피할 수있는 잠재적 인 방법을 설명 할 수 있습니까?


Give an example of filter and reduce over an iterable object.

필터의 예제를 제공하고 반복 가능한 객체를 줄입니다.


Can you explain the uses/advantage of a generator?

generator 의 용도 / 장점을 설명 할 수 있습니까?


-.NET

What is the WebSecurity class in .NET? What is its use?

.NET의 WebSecurity 클래스는 무엇입니까? 그 용도는 무엇입니까?


In .NET, attributes are a method of associating declarative information with C# code. Please describe the way they are used and a proper use case.

.NET에서 속성은 C # 코드와 선언 정보를 연결하는 방법입니다. 사용 방법과 적절한 사용 사례를 설명하십시오. 


Which is the best way to pass configuration variables to ASP.NET applications?

ASP.NET 응용 프로그램에 구성 변수를 전달하는 가장 좋은 방법은 무엇입니까?


Is it possible in .NET to extend a class (any class) with some extra methods? If yes, how can it be accomplished?

.NET에서 몇 가지 추가 메서드로 클래스 (any 클래스)를 확장 할 수 있습니까? 그렇다면 어떻게 성취 될 수 있습니까?


-PHP

If you need to generate random numbers in PHP, what method would you follow?

PHP에서 임의의 숫자(random numbers)를 생성해야한다면 어떤 방법을 따르겠습니까?


What’s the difference between the include() and require() functions?

include ()와 require () 함수의 차이점은 무엇입니까?


Explain how you develop and integrate plugins for PHP frameworks, like Laravel and Yii.

Laravel 및 Yii와 같은 PHP 프레임 워크 용 플러그인을 개발하고 통합하는 방법을 설명하십시오.


How can you get web browser’s details using PHP?

PHP를 사용하여 웹 브라우저의 세부 사항을 어떻게 얻을 수 있습니까?


-HTML/CSS

Can you describe the difference between inline elements and block elements?

inline elements와 block elements의 차이점을 설명해 주시겠습니까?


Why is it generally a good idea to position CSS s between and JS s just before ? Do you know any exceptions?

CSS를 배치하기 전에 일반적으로 JS를 배치하는 것이 일반적으로 좋은 이유는 무엇입니까? 예외를 아십니까?


Can you describe how padding and margin differ?

padding과 margin이 어떻게 다른지 설명 할 수 있습니까?


How is responsive design different from adaptive design?

반응형 디자인(responsive design)과 적응형 디자인(adaptive design)의 차이점은 무엇입니까?


출처 : https://resources.workable.com/coding-interview-questions



Posted by Joseph514
IT이야기/입코딩2017. 8. 8. 13:28

-프로그래머(Programer)의 종류

프로그래머에는 어떤 종류가 있는지 한번 알아보겠습니다.

좀 해깔리기는 한데, 사용하는 언어로 JAVA 개발자, PHP 개발자, 닷넷 개발자를 나누기도 하지만 개발자 종류로서는 웹 개발자이고 SI업무나 SM 업무를 할수 있습니다.

물론 JAVA를 사용한다고 꼭 웹을 만드는 게 아니라 모바일이나 응용프로그램을 만들기도 합니다.

어떤 어떤 분야에 프로그래머가 있는지 한번 알아 보겠습니다.



'프로그래머'라는 단어 하나로 간편하게 통칭하여 부르고 있긴 하지만, 프로그래머에도 여러 분야가 있습니다. 

고급 언어와 툴을 다룰 줄 아는게 전부인 프로그래머 부터, 저급 언어까지 다룰 줄 아는 프로그래머까지 그 스펙트럼은 어마어마하게 넓습니다. 

또 소수의 코어파트 프로그래머들이 있는가 하면, 다수의 양산형 프로그래머인 코더가 있습니다.

컴퓨터 프로그래밍 기술에 능숙한 사람들은 유명세를 타기도 하지만, 이러한 관심을 받는 대상은 보통 소프트웨어 공학자 집단으로 국한됩니다. 

그리고 종종 저명한 프로그래머들 중에는 "해커"라는 이름으로 불리는 사람들도 있습니다.

프로그래머라는 직종이 이런 넓은 스펙트럼을 가지고 있기 때문에 단순히 뭉뚱그려 부르기에는 상당히 무리가 있습니다. 

비유를 하자면 트럭, 택시, 버스, 중장비기사를 전부 뭉뚱그려 '운전자'라고 표현하는 것과 같습니다.


-알고리즘 개발자

응용수학자 및 물리학자들이 많이 분포해있는 분야입니다. 

특정 상황에서 더욱 효율적인 알고리즘을 만들어내고 이를 수학적, 논리적으로 증명하는 게 주 목적입니다. 

사람들은 이들은 프로그래머/엔지니어라고 부르기보단 박사/연구자라 보는 경향이 있습니다. 실제 프로그래밍은 최소한도로만 수행하거나 아예 수행하지 않습니다.

프로그래밍 언어는 대부분 한 종류 이상 능숙하게 다룰 수 있기는 하지만 결과물을 프로그램으로 발표하는 게 아니라 논문으로 주로 발표하는 것도 큰 차이입니다. 

프로그래밍 언어를 다룰 줄 아는 것도 정말 순수하게 도구로써 다루는 것이지 그것이 생계 수단이 아닙니다. 

이상을 보면 알겠지만 국내외적으로 보통 프로그래머로 부르지 않고 과학자 또는 교수로 더 흔히 부릅니다.


저희 학과 교수님들도 프로그래밍과는 거리가 먼, 수학 전공자이신 분들도 있었습니다.

한글 문서로 손코딩하시던게 생각나네요. 알고리즘 쪽은 완전 전문가이시겠죠.



-보안 개발자

해킹 및 정보보안 관련 기술들을 다루는 프로그래머를 의미하며, 이를 위해서는 많은 기반 지식이 필요합니다. 

필요하면 서버 등의 플랫폼의 보안성 향상을 위해 툴을 준비하거나 서버 프로그래밍 자체를 튜닝하고 감시할 체제를 준비해야 하기 때문에 보통 고급 개발자입니다. 

업무에 비해 책임이 막대하며 특히 보안사고가 터지면 모든 책임을 뒤집어쓰는 직종이기 때문에 IT업계에서도 대우가(급여가 아닌) 상당히 좋지 못합니다.

OS, 네트워크(TCP/IP)에 대해 매우 심도깊은 이해가 필요하고 C언어를 매우 잘 다룰 줄 알아야 합니다. 최소한 한 종류 이상의 어셈블리어를 다룰 수 있어야 합니다. 

현대 암호학에 대해서는 개념 정도는 알고 있어야 하며(암호 알고리즘을 만들 줄 알아야 하는 건 아닙니다.) 높은 수준의 리버스 엔지니어링실력도 요구됩니다.

이상이 정상적인 보안 개발자의 얘기고, 좀 비정상적인 보안 개발자는 운영 중인 시스템을 지속적으로 모니터링하다가 보안침해 의심사고 발생시 신속하게 조치해서 차단하고 이미 입은 피해를 파악해 복구하는 일을 합니다. 

왜 비정상적이라고 하냐면 이런 직업은 원래 개발자가 아니라 '오퍼레이터'라고 부르기 때문입니다. 

국내에 이런 오퍼레이터 전문 육성 코스가 없어서 다들 프로그래밍을 하다가 이쪽으로 넘어오는데 전공 지식을 거의 활용할 수 없어서 기초부터 새로 배워야 하는 경우가 부지기수입니다. 

오퍼레이터는 프로그래머의 하위 분류가 아니라 이웃 분류입니다. 

동등한 전문성을 갖추고 있는 반면 그 전문 영역이 별로 겹치지 않습니다. 오퍼레이터가 전사라면 프로그래머는 대장장이. 칼을 들고 싸우는 직업이냐 칼을 만드는 직업이냐의 차이라고 하네요.


프로젝트에 들어 가보면 한 명씩 있으십니다. 일반 웹개발자들보단 단가가 쎄보이는데, 웹개발자들도 마찬가지지만 야근이나 주말 출근도 자주 하시는거 같습니다.



-빅데이터 분석가

빅데이터를 분석하고 해석합니다. 통계학과 컴퓨터공학을 둘 다 전공한 융합형 프로그래머에 속합니다. 

상당히 높은 수준의 수학 능력이 요구되는 반면 프로그래밍 실력은 그리 크게 요구하지 않습니다. 

사용하는 도구도 통계와 수치연산에 특화된 R이나 Python(NumPy)을 더 선호하고 데이터베이스에 대한 지식도 어느 정도 필요합니다.

전공 석사급 이상의 학력이 있으신 분들이 하시는걸로 알고 있습니다. 국내에서는 다룰 줄 아시는분도 별로 없고 다른 전문 프로그래머들도 그렇지만, 제법 단가를 많이 받는다고 들었습니다.



-소프트웨어 아키텍트(SA)

마이크로소프트의 정의에 따르면, 전략, 조직 역학, 프로세스, 커뮤니케이션, 리더십 등 관리능력과 엔지니어링에 대한 깊은 이해를 갖춘 개발 지휘자를 아키텍트라 부릅니다.

엄밀히 말하면 프로그래머가 아니라 기획자입니다. 조직 관리 능력, 리스크 관리 능력 같이 프로그래밍 능력과는 전혀 관계없는 분야의 지식을 요구합니다. 

건축 쪽의 아키텍트와 마찬가지로 현장(프로그래밍)을 모르는 채로 될 수 있는 직업은 아니지만 현장 지식만 잔뜩 쌓는다고 될 수 있는 직업도 아닙니다. 게다가 전문 교육을 이수하는 것만으로는 될 수 없고 경험이 아주 중요한 직종으로써 프로그래머판 도선사와 비슷하다고 합니다.



-게임 개발자

게임 개발자에는 게임 프로그래머만 있는게 아닙니다.

기획, 디자인, 사운드 등의 다양한 파트가 있으며 그중에, 게임 프로그래머가 있습니다.

게임 프로그래머는 프로그래밍을 통해 맵 디자인, 캐릭터 디자인, 사운드, 각종 시스템 등을 뒤섞어, 게임이라는 하나의 결과물을 만드는 직군입니다. 

게임을 만들때 필요한 핵심 인력중 하나입니. 사실상 게임을 만드는 데 있어 가장 귀중한 인력이라고 봐도 과언이 아닙니다. 엔딩크레디트에서는 보통 프로듀서-디렉터-프로그래머-아트-사운드-그 외 순서로 나옵니다.

게임을 만드는건, 게임을 하는것과 차이가 큽니다. 밥을 먹는거랑 밥을 만드는 것만큼의 차이랄까요.


게임 프로그래머를 세부적으로 나누면

게임플레이 프로그래머 (Gameplay Programmer)

물리 엔진 프로그래머 (Physics Programmer)

그래픽 / 렌더링 프로그래머 (Graphics / Rendering Programmer)

개발 도구 프로그래머 (Tools Programmer)

네트워크 프로그래머 (Network Programmer)

정도 되겠군요.


데이터베이스 관리자의 경우 프로그래머가 같이 도맡아 할 수도 있긴 하지만 대부분 데이터베이스 관리자를 따로 둡니다. 게임 개발자 직종으로써의 인식은 별로 없지만 굉장히 중요한 직종입니다. 특히 온라인 게임의 경우 그 중요도가 다릅니다. 새벽에도 전화오면 불려와서 처리 한다더군요.



-웹 개발자

웹 개발은 웹 상에서 사용되는 소프트웨어 개발과 웹페이지를 제작하는 분야입니다. 

웹 프로그래머는 이를 제작하는 개발자를 의미합니다.

현재 웹의 범위가 엄청나게 넓어져서, 수요도 많고, 공급도 많은 직종입니다.

'웹땔감' 등으로 비하하거나, 2000년대 제로보드랑 나모웹에디터로 홈페이지 만들듯이 아무나 할수 있다고 생각될수 도 있을거 같은데, 이 분야도 들어가면 끝을 모를 정도로 깊네요. 그 유명한 페이스북이나 아마존도 다 웹입니다.


웹 프로그래머는 크게 두 종류로 나누는데, 백 엔드(Back-end) 개발자와 프론트 엔드(Front-end) 개발자로 구분합니다. 백 엔드와 프론트 엔드 구분은 기업, 조직마다 나누는 경우도 있고 아닌 경우도 있으나 대체적으로 안정적으로 프로젝트를 운영하는 집단은 두 가지를 구분합니다.


1)프론트 엔드(Front-end) 개발자

사용자에게 보여지는 화면을 개발, 주로 HTML, CSS를 활용하여 웹 디자인을 웹 페이지로 구현하는 개발자입니다. 

디자인 시안을 그대로 구현하는 작업이라는 특징 때문에 조직에 따라 프론트 엔드 작업을 웹 디자이너에게 업무를 맡기는 경우도 있습니다. 

최근 핵심 사항으로는 HTML4에서 HTML5로의 변화에 따라 반응형 웹이 유행하고 있으며 여러 버전의 브라우저에서 모두 호환될 수 있는 웹 표준을 중시하는 문화가 퍼진 상태입니다.

해외에서는 퍼블리셔라는 표현 보다는 프론트 엔드라고 쓰는거 같더군요. 두 부분이 어느정도 겹치는 업무가 있긴한데 한국에서 쓰는 퍼블리셔 개념은 아닌거 같습니다.


2)백 엔드(Back-end) 개발자

웹 상에서 사용되는 소프트웨어나 웹 페이지가 기능적으로 동작하도록 구현하는 개발자입니다. 여기서 기능이란 해당 소프트웨어가 가진 목적 구현을 위한 모든 환경을 의미합니다. 

즉, 클라이언트의 기능 뿐만 아니라 서버 개발도 해당됩니다. 

예를 들어 웹 페이지로 계산기를 만든다고 했을 때, 계산기 인터페이스는 프론트 엔드의 영역이지만, UI 뒤에 숨겨져 있는 계산기 알고리즘과 원리는 백 엔드의 영역이라고 생각하면 됩니다. 

주로 HTML, CSS, Javascript, jQuery 등 UI 영역뿐만 아니라 Java, JSP, PHP, Spring framework, 디자인 패턴 지식 등 다양한 기술이 요구됩니다.


3)풀 스택(Full-stack) 개발자

위의 프론트엔드와 백엔드를 모두 다룰 수 있는 개발자입니다. 의외로 그리 드물지 않습니다. 

프론트엔드나 백엔드나 사용하는 기술이 거의 비슷하고 서로 겹치는 게 많기 때문입니다. 

하지만 실상을 놓고 보면 자신을 풀 스택 개발자라고 소개하는 사람은 아직 본인의 전문 분야가 확립되지 않은 쉽게 말해 '신참' 개발자일 확률이 높습니다. 

그렇지 않다면 홈페이지 제작 프리랜서로 활동한 경력이 긴 일인기업 대표일수도 있습니다. 만약 후자라면 최소 3인분 이상을 해내는 슈퍼맨이라고 합니다.


-모바일 개발자

스마트폰 애플리케이션을 개발하는 사람입니다. 

2017년 7월 기준 가장 많이 사용되는 안드로이드, iOS 두 가지 모바일 운영체제의 소프트웨어를 개발하는 사람이라고 보면 됩니다. 

두 가지 OS를 모두 개발하는 사람도 있으나 조직의 규모나 개인의 역량에 따라 안드로이드 개발자, iOS 개발자로 구분하는 경우도 있습니다.


1)안드로이드 APP 개발

안드로이드는 Java를 기반으로 두고있는 언어이기 때문에 Java에 대한 지식이 필요하며 안드로이드 스튜디오 3.0부터 표준 언어로 채택하고 있는 Kotlin 또한 학습해야 합니다. 

안드로이드는 Eclipse로 개발이 가능했다가, 구글의 정책으로 안드로이드 스튜디오에서만 개발이 가능하도록 변경됐습니다. 저는 학부생 때 안드로이드 어플 제작 프로젝트로 이클립스에서 SDK 설치해서 만들었는데, 안드로이드 스튜디오를 쓰니 더 편해진거 같네요.


2)iOS APP 개발

iOS는 MacOS의 언어와 동일하게 Objective-C와 Swift에 대한 지식이 필요합니다. 

두 가지 언어의 컴파일러로는 대부분 MacOS의 Xcode를 사용하며 이는 MacOS에서 앱스토어를 들어가면 설치할 수 있습니다.


3)하이브리드 APP 개발

하이브리드라는 이름에서 생각할 수 있듯, 안드로이드와 iOS를 모두 호환 가능한 애플리케이션을 개발하는 것입니다. HTML5로의 발전, CSS3의 발전 등을 통해 제약이 많던 이전 웹 언어들과 달리 현재는 다양한 애니메이션과 기능이 추가되었고, 이를 활용해 OS의 제약 없이 개발하는 것입니다. 

그러나 안드로이드, iOS 언어에 비해 출력이 매끄럽지 않아서 대다수 스마트폰 앱으로 먹고사는 벤처기업은 하이브리드 앱을 개발하지 않고 네이티브 언어를 채택합니다. 

스마트폰 앱이 주력사업이 아닌 여러 대기업들의 경우엔 개발 비용을 줄이고자 하이브리드 APP을 많이 채택합니다. 오픈 소스로 Sencha등을 활용하는 편입니다.

뭔가 대단한게 아니라, app은 그냥 책갈피 정도나 받아오는 값을 보여주는 정도의 역활만 하고 나머지는 웹에서 다 처리하는 방식입니다. 모바일 웹이랑 네이티브 앱의 중간 정도 되는 역활이네요. 계속해서 주기적으로 업데이트 받아오는 쇼핑몰 같은게 아니면 그냥 네이티브로 작업하는게 좋을거 같습니다.


사실 임베디드 시스템 프로그래밍과 큰 상관은 없어 보입니다만,, 둠의 경우 호환성이 좋아서. 위와 같은 카메라나, 전화기 플레이 할 수 있다고 하더군요.


-임베디드 시스템

넓은 범주에서 정의하자면, 일반적인 목적으로 만들어진 컴퓨터가 아닌, 특수한 목적을 가지고 만들어진 프로그래밍 가능한 모든 컴퓨터를 의미합니다. 

PC는 임베디드 시스템을 구축하는 데 사용되긴 하지만, 그 외에도 수많은 용도로 사용될 수 있으므로 그 자체로 임베디드 시스템은 아닙니다. 하지만 컴퓨터와는 달리 어떤 특수한 목적만을 수행하기 위해 만들어진상 컴퓨터들

(전화기, 냉장고, 텔레비전, FAX 등)은 각자의 기능을 수행하기 위한 MCU를 가지고 있으며, 이것들은 특수한 목적을 수행하기 위한 컴퓨터이므로 임베디드 시스템이라고 할 수 있습니다. 

아두이노나 라즈베리파이 같은 임베디드 보드들 이름은 들어봤는데, 이것과 관련되어 있는지는 한번 찾아봐야겠네요.


학부생때는 임데디드 강의 시간에 요상한 키트에 리눅스 우분투에서 연결한 다음 프로그래밍한 것을 돌려보곤 했었는데 웹개발자를 하다 보니 쓸 일이 없네요.


-전산 정보 시스템

SI(시스템 구축)

SM(시스템 유지보수)

ERP

해당 항목들만 따로 포스팅해도 될만큼 이야기가 많기에 따로 포스팅하겠습니다.

국비지원 JAVA 학원에서 웹개발을 3개월 공부한뒤, 주로 가게 되는 분야입니다. 한 몇년 SI에서 굴렀던 적이 있는데, 왜그렇게 사람들이 꺼려하는지 알겠더군요.


-융합형

다른 전문분야의 인물이 자신의 지식을 활용하여 프로그래밍을 하는 경우도 존재합니다. 

의사가 직접 의료 프로그램을 통계화, 수치화한다든가, 국과수 직원이 치아 감별을 통한 개인 식별을 위한 프로그래밍을 한다든가, 이과 대학 교수가 모델링-시뮬레이션 툴을 만든다던가 하는 경우가 이에 속합니다.

이들에게 요구되는 능력은 프로그래밍 능력이 아니라 자기 분야의 전문성입니다. 

전문성과 달리 프로그래밍은 극도로 완벽하고, 정교하고, 간결한 수준으로 잘 할 필요는 없습니다. 

혹시 다소 불필요한 부분이 코드에 덕지덕지 붙어있다거나, 코딩하는 시간이 다소 오래 걸리거나 해도 크게 문제되지는 않습니다. 

이들에게 최우선으로 요구되는 사항은 전문성이고, 프로그래밍 능력은 그 다음이기 때문입니다. 

어차피 프로그램을 잘 짜서 성공하게 된다면, 그 다음부터는 프로그램 설계가 아닌 단순 코딩 정도는 양산형 프로그래머에게 맡겨도 됩니다.


-코더

좀 논란이 되는 구분인데, 보통 알고리즘을 사용할줄 알면 프로그래머, 복붇만 할수 있음 코더라고 한다고 합니다.

자기가 하면 프로그래머이고 남이 하면 코더로 보일수도 있죠.

나중에 따로 정리를 해보겠습니다.



출처 : 나무위키, 본인생각

Posted by Joseph514
IT이야기/입코딩2017. 8. 7. 14:51

-프로그래머는 학력이 필요할까요?


프로그래머와 학력의 관계에 대해서 한번 포스팅 해보겠습니다.

참고로 저는 지방 듣보잡 4년제 컴퓨터 공학과를 나왔습니다. 

학력이 어떻니 할 정도로 좋은 위치에 있고 뛰어난 실력을 가지지도 않습니다.

인터넷에서 흔히 볼 수 있는 전공자 부심은 아니고, 대학교에 학사나 석사, 박사를 공부하면 어떤 점이 더 유리한곳인지 이야기하고 싶네요.


참고로 이야기를 적자면, 비전공자들은 컴퓨터 공학과를 프로그래머를 양성하는 교육기관으로 생각하는 경향이 있는데, 사실 프로그래밍은 컴퓨터 공학과에서 배우는 것들 중 일부분에 지나지 않습니다.

흔히 일반인들은 컴퓨터 공학과를 프로그래밍을 배우는 학과라고 생각하지만, 그것은 마치 경제학과가 펀드매니저를 양성하는 학과라거나, 법학과는 사법시험 합격 요령을 배우는 곳이라고 생각하는 것과 같습니다. 

컴퓨터 공학과는 컴퓨터 공학이라는 독립적인 학문을 배우는 학과입니다. 


흔히 프로그래머에게는 학력이 중요하지 않다고, 심지어 대학 교육이 반드시 요구되는 분야가 아니라고들 말을 합니다. 반대로 가능한 한 명문 대학과 명문 대학원을 가야 많은 것을 배울 수 있고 취업도 잘 된다는 말을 하는 사람도 있습니다. 이렇게 상반된 이야기를 듣게 되는데, 이는 상황에 따라 둘 다 맞 다고 볼수 있습니다.


-저학력이라도 상관없는 상황

웹, 모바일 개발자처럼 직업학교에서도 배우는 정도의 커리큘럼으로 정리가 되어 있고 복잡한 처리를 필요로 하지 않는 분야

자기가 직접 앱을 만들어서 팔고 회사 차릴 수 있는 사람. (다만 통계상 학력이 높은 사람이 회사를 차릴수록 수익률이 높고 오래가고 도산률이 낮습니다.)

중소기업이나 인기없는 스타트업 등 쉽게 들어갈 수 있는 직장에 들어가더라도 만족하는 사람. (낮은 대우 받고 계속 다니는 평범한 경우, 그 직장 규모 전체를 키워버리는 특이한 경우, 거기서 쌓은 경력으로 대기업에 이직하려는 경우 셋 다 포함.)

아래 상황에 필요한 것들을 전부 독학할수 있고, 학위 없이도 대졸들을 전부 떨쳐내고 뽑힐 만한 능력자. (빌게이츠, 스티브 워즈니악, 리누스 토르발즈 같은 말이 능력자지, 이정도는 거의 정점 수준의 프로그래머입니다. 게다가 예시로 든 프로그래머들은 전부 세계에서 손 꼽히는 명문대를 졸업했거나 창업하려고 자퇴한 사람들입니다.)

공무원 시험이나 공공기관 시험 치려는 사람


-고학력이 반드시 필요한 상황

수학, 물리학, 컴퓨터공학 등 대학교 3학년 이상의 고급 지식이 필요한 프로그래밍(소프트웨어,빅데이터,데이터베이스 등)

국내 대기업, 다국적 기업에 경력 없이 입사하고 싶은 사람

해외취업 목표.

교수, 정부출연연구소 목표


확실히 제가 해외 취업을 준비하면서 전공자인게 유리하더군요. 한국에서 SI, SM 개발자를 하더라도 전공자에 기사 자격증 있으면 이득은 없어도 최소한 손해는 안 보는것 같습니다.


프로그래밍 분야에 있어서 학력 = 실력이 아닙니다. 고가의 실험 실습 도구가 필요한 다른 분야와는 다르게 프로그래머에게는 오직 컴퓨터 한 대만 있으면 충분하고, 필요한 관련 지식에 대한 정보는 인터넷의 정보 바다에 흘러 넘칩니다. 



게을러서, 즉 자기가 안 찾아봐서 관련 지식 및 정보를 모르는 경우는 있어도, 찾을 수가 없어서 관련 지식 및 정보를 모르는 경우는 극히 드물다고 할 수 있습니다. 

그리고 일반적인 기업의 일반적인 코딩 및 실무에 필요한 능력만 따진다면, 대학에서 배우는 추상적인 지식들은 사실 쓸모 없습니다.

그러나 아이러니하게도 "한국에서" 고급 지식을 익혀서 고급 엔지니어로 성장하려면 상위권 대학에 진학해야 합니다. 한국에서 고급 지식을 효율적으로 얻을 수 있는 곳은 좋은 대학 뿐입니다. 

널리 알려진 사실이지만 한국의 컴퓨터공학/소프트웨어과는 구조적인 문제로 커리큘럼이 낙후되어 있습니다. 

세계 랭킹 50위권인 서울대학교나 KAIST에서나 미국의 제대로 된 탄탄한 커리큘럼에 그렇게 많이 꿇리지 않는 교육을 받을 수 있습니다. 



프로그래밍에 필요한 지식(선형대수학, 확률/통계론, 이산수학, 데이타구조, 알고리즘, 아키텍쳐, 프로그래밍 언어, OS, 오토마타, 시스템 프로그래밍, 네트워크, 소프트웨어 공학, 데이터베이스, 컴퓨터그래픽, 전산논리학, 컴파일러, 계산이론, 정보보호, 인공지능, 인간-컴퓨터 상호작용 등)은 실무 경험이나 독학으로 익히기 어렵습니다. 

벽돌공 일을 30년 하면 건축 설계에 대해 모르지는 않게 되겠지만, 그렇다고 고급 건축 설계자가 될 수는 없다는 뜻과 같습니다. 현업에 종사한지 2년 내로, 내가 나온 대학이 좋은 대학이었는지 아니었는지 뼈저리게 느끼게 됩니다. 


한국의 대학원 또한 마찬가지. 애초에 중요한 건 대학원을 나왔느냐가 아니라 어떤 대학원에서 어떤 수준의 교육을 받고 어떤 퀄리티의 논문을 냈느냐라는 것을 상기해야 합니다. 

현실적으로 낙후된 대학원 환경에서 제대로된 교육을 제공하는 대학원은 한국에 두세 곳 뿐이고, 이런 대학원은 들어가기가 상당히 어렵습니다.

그나마 자대생(학부를 해당 대학에서 마친 학생)의 경우도 절반 넘게 학점에서 컷트 당합니다. 

자대가 아닌 경우 들어가기는 완전히 바늘구멍인데, 인서울 정도에서 이런 대학원을 가려면 과 1위를 해도 떨어지는 경우가 대다수인 상황이라고 합니다.

참고로 이건 한국뿐 아니라 미국도 마찬가지입니다. 

최상위권 대학은 한국의 탑3 대학보다도 환경이 좋지만, 조금만 순위가 내려가더라도 수업의 질이 크게 떨어지고, 이는 결국 졸업자의 엄청난 경쟁력 저하로 이어집니다. 


좋은 대학을 가려면 수능 공부만 해야 한다고 생각하기 쉬운데, 그렇지도 않습니다. 

수시 전형이 7~80%가 된 상황에서 정보올림피아드나 프로그래밍을 잘 하는 것이 오히려 확률적으로 더 유리합니다. 

하지만 수시로 지원한다 해도 프로그래밍만 파지 말고 내신 반영 비율을 확인해야 합니다. 프로그래밍만 할 줄 아는 인재를 뽑고자 하는 대학은 거의 없다고 보여 집니다.

대기업에 입사하고자 할때는 대학 졸업장이 당연히 필요하고, 괜찮은 중견기업에 지원할 때도 필요합니다.

채용자 입장에서는 그 많은 지원자들의 능력을 일일이 직접적으로 다 테스트해서 체크해 볼 수는 없는 노릇이고, 결국 간접적으로 추정해야 하는데, 거기에 사용되는 자료가 학교 성적을 비롯하여, 학력/학벌 등인 것입니다.

설사 SI이나 SM 업무를 하더라도 "갑"에서는 개발자의 학력이나 학벌을 중요시 여기기도 합니다. 

그리고 대학교 졸업장 없이는 실력이 뛰어나더라도 상대적으로 설계 경험을 접해보기 힘든 경향이 있습니다. 

사실 학력과 실력은 반드시 일치하는 것도 아니고, 이 분야 특성상 학력과 실력이 무관한 경우도 매우 많지만, 이 분야 특성을 잘 모르는 일반인들로서는 사회 통념상 학력이 없으면, '저 사람은 대학도 나오지 않았는데, 당연히 실력도 없을 거야~' 라는 식으로 선입견 내지 편견을 가지기 쉽습니다. 

그래서 그러한 편견을 가진 일반인이 발주를 하는 갑의 위치에 있다면, 실력을 보지도 않고 쉽게 무시하기 일쑤입니다. 


하여간 한국에서 사회생활 하려면 대학은 나와야 합니다. 미국도 프로그래머로 취업하려면 보통 대학을 졸업해야 하고, 구글 오라클 등의 대기업에 취업하려면 좋은 학교 출신이 아무래도 유리합니다.

물론 자기가 직접 벤처기업을 창업하는 경우에는 대학졸업장이 필요 없습니다. 그러나 만약 자신이 카네기멜론 컴공 석사이상 졸업자라면, 국내에서 소프트웨어 벤쳐 한다고 하면 수 억원 이상은 그냥 투자 받을 수 있습니다.


획기적인 알고리즘을 만들어낸다는 교수들이 바로 박사들입니다. 또, 알게 모르게 석사 학위도 꽤 쳐줍니다. 

구글 검색엔진에 사용된 알고리즘을 고안해낸 래리 페이지가 바로 석사입니다. 더붙여, 좋은 지도교수님 밑에서 잘 트레이닝 된 석사가 건성으로 졸업한 박사보다 나을 때도 많습니다. 

끝으로, 교수가 코딩 안하는 이유는 어느정도 급만 되면 코딩할 필요가 없는 것도 있는 한편, 박사과정 학생들이 가져다 주는 획기적인 알고리즘이 타당한지 검증하고 논문 검토하는 데도 바쁘기 때문이기도 합니다. 

그 와중에 애들도 가르치고, 연구도 따와야 하고, 학내 정치도 해야 되기 때문이죠.


본인 영어 실력이 좀 된다면 독학으로 전문 지식을 익힐 방법이 있긴 합니다. 

Coursera, edx, MITOCW, Udemy 등에서 제공하는 강좌들에서 이런 고급 수학, 물리학 지식을 제공합니다. 

그리고 git-hub에 가서 MOOC 관련 다운로더 코드를 파이선으로 작성해 놓은 것들이 있는데 다운 받아서 실행하면 강의당 용량이 4G가 정도 하는 패키지로 자막까지 받을 수 있습니다. 미친듯이 사전 찾아가면서 공부하면 다 이해될 수 있습니다. 


출처 : 나무위키, 본인생각

Posted by Joseph514
해외생활이야기2017. 7. 20. 17:28

-실리콘 밸리의 기업들이 캐나다 밴쿠버로 옮겨가고 있다고 하네요.


[월드 톡톡] IT 산실 실리콘밸리, 캐나다 밴쿠버로 이사 가나

2017.02.22 03:08

원문보기


트럼프 탓에 인재 이탈 우려… IT 기업들의 이민 문의 폭주

아마존 등은 캐나다에 자회사


캐나다 밴쿠버의 사업가 마이클 티펫은 이달 초 '트루 노스 벤처스(True North Ventures)'라는 사업을 시작했다.  미국 캘리포니아주(州) 실리콘밸리의 정보기술(IT) 전문가들에게 캐나다 내 이민 전문 변호사들을 소개해주고, 이들이 캐나다에 정착하는 것을 돕는 중개 서비스다. 

이 사업은 지난달 27일 도널드 트럼프 미국 대통령이 이슬람 7국 국민의 미국 입국을 일시 제한하는 '반(反) 이민' 행정명령을 발동한 직후 시작됐는데, 1주일 만에 문의 전화가 100통이 넘게 걸려왔다고 파이낸셜타임스(FT)가 20일(현지 시각) 보도했다. 

티펫은 "트럼프 행정부는 '미국 우선'을 외치지만, 정작 이득을 보는 건 캐나다"라며 "아메리카 퍼스트(America first·미국 우선주의)가 아니라 밴쿠버 퍼스트인 셈"이라고 했다.

FT에 따르면 이민자 인력에 의존하는 실리콘밸리 기업들이 트럼프 대통령의 반이민 개혁에 맞서 미국을 떠나 캐나다로 몰리고 있다. 

트럼프가 반이민 행정명령에 이어 외국인의 취업 비자 프로그램인 'H1-B'에도 칼을 빼 들것으로 보이자, 이들이 아예 캐나다로 터를 옮기고 있는 것이다. 

지난해 기준 실리콘밸리의 이민자 비중은 37.4%에 달한다.

캐나다는 유리한 입지 조건으로 실리콘밸리에서 빠져나오는 기업들을 유치하고 있다. 

개방된 이민 정책 덕에 외국 출신 전문 인력들이 취업 비자를 얻기 쉬울 뿐 아니라, 사무실 임대료와 인건비는 실리콘밸리의 절반 수준이다. 

정부 차원에서 기업의 연구·개발(R&;D) 프로그램에 대한 재정적 지원책도 갖고 있다. 

이미 아마존·마이크로소프트 등 미국의 대표적인 IT 기업들은 밴쿠버에 자회사를 유치하고 수백명을 고용하고 있다. 

그레고어 로버트슨 밴쿠버 시장은 "현재 밴쿠버 IT 분야 일자리는 약 7만5000개에 달한다"며 "과거 캐나다를 먹여 살린 것이 천연자원이었다면, 이젠 기술산업이 일자리를 만들 것"이라고 했다.



몇 달전에 나온 기사이긴 한데, 캐나다 벤쿠버에 실리콘 밸리 기업들이 빠져 나오고 있다고 하네요.

그리고 6월달 불과 한달전에 올라온 기사입니다.


실리콘밸리 인재들을 영입하기 위한 캐나다의 새로운 시도

최종수정 2017.06.15 17:42

원문보기


중략...

미국 CNN의 14일(현지시간) 보도에 따르면 12일(현지시간) 캐나다 정부는 보통 1년씩 걸리던 임시 취업 및 거주 비자 발급을 2주 내로 단축시키는 새로운 프로그램을 시작했다.

2년의 유효기간을 둔 이 비자는 높은 실력을 가진 인력을 찾는 "혁신" 기업들에게 적용될 예정이다. 

이러한 비자 발급 단축은 캐나다 정부의 '글로벌 스킬' 프로그램의 일환으로 미국 IT기업들의 인재를 국경 너머로 유인시키기 위함이다. 

캐나다 정부는 이를 위해 규제 완화와 세금 감면, 리브랜딩(기존 브랜드를 새롭게 창출하는 것) 등의 지원과 병행하고 있다. 

온타리오주는 올해 안에 실리콘밸리 기업들의 의사결정권자와 직원들을 겨냥한 채용 광고를 따로 제작할 예정이다.

중략...

온타리오주 정부는 구글이나 페이스북, IBM, 아마존 등 미국의 주요 IT기업들의 현지 사무실을 따로 제공하고 있다. 이 기업들은 인공지능과 슈퍼컴퓨터, 친환경 기술, 자율주행차와 같은 분야에 강하다는 특징이 있다. 

중략...

미국의 트럼프 행정부가 이민 제한 정책으로 대부분의 IT 기업들의 반발을 사고 있는 가운데 캐나다는 오히려 그 반사이익을 보고 있는 셈이다. 

지난달 31일(현지시간) 발표된 메리 미커의 '2017 인터넷 트렌드 보고서'에 따르면 미국 상위 25개 IT 기업의 직원들 중 150만명이 이민 1~2세대로 나타났다. 


출처 - 아시아 경제


벤쿠버 뿐만 아니라 온타리오 주에서도 기업들이 들어오나 봅니다.

IT 일하시는 분들 참고하시면 좋을 거 같습니다.



Posted by Joseph514
IT이야기/입코딩2017. 6. 29. 11:27

개발자의 평생공부 -임백준 IT칼럼니스트


요 몇일전에 올라온 글인데, 혼자 보기 아깝게 너무 좋은 글들이 많이 적혀있어서

다 중요한 내용이긴한데, 마음에 와 닿는 몇몇 내용 발췌해 봅니다.



개발자의 평생공부

원문보기



평생 공부하는 건 개발자만이 아니다. 다른 직업을 가진 사람들도 쉼 없이 공부하고, 컨퍼런스와 세미나를 참가하고, 스터디를 한다. 공부없이 할 수 있는 일이 없기 때문이다. 

언뜻 보기에 공부와 거리가 멀어 보이는 바텐더조차 공부할 것이 많다. 바텐더를 위한 컨퍼런스는 물론이고 전문적인 팟캐스트 방송까지 있다. 

공부는 누구나 하는 것이므로 공부한다는 사실만으로 엄살을 떨 필요는 없다. 문제는 공부의 방향이다.

개발자의 경우는 평균적으로 보았을 때 3년 전에 학습한 지식이면 낡은 징후를 보이기 시작하고 5년이면 생명을 다한다. 더 오래가는 지식도 물론 있다. 프로그래밍의 본질에 가까운 지식은 수명이 오래가고 파편적인 지식일수록 수명이 짧다. 그래서 본질을 추구하며 에피파니(Epiphany)를 경험한 사람은 그렇지 않은 사람에 비해서 공부로 인한 스트레스를 덜 받는다. 중요한 것과 중요하지 않은 것을 구별하는 혜안이 있기 때문이다.


중략....


개발자가 공부하는 것은 그래서 두 번째 유형의 사람이 가진 능력, 본질적인 능력을 키우는 것을 의미한다. 프로그래밍의 본질은 문제의 해결이다. 

트렌드를 좇는 것은 파편적인 지식을 획득하는 것에 불과하기 때문에 큰 의미가 없다. 

페이스북이나 트위터의 타임라인을 보면 수만가지 새로운 기술과 도구가 날마다 쏟아진다. 

좋은 개발자라면 그런 것들을 모두 알아야 하는가? 전혀 그렇지 않다. 파편적인 지식은 파편적인 태도만으로 충분하다. 

트렌드에 필요한 것은 가벼운 눈팅이지 공부가 아니다. 공부는 본질에 다가서려는 노력이다.


중략....


우리는 종종 실력을 이미 알고 있는 지식의 총량으로 착각한다. 

실력과 지식의 총량은 희미한 상관관계가 있기는 하지만 사실상 무관하다. 

진짜 실력은 임기응변이기 때문이다. 실력은 주변상황에 휘둘리지 않는 집중력이다. 

해결해야 하는 문제가 무엇인지 알아채는 감각이다. 

처음 본 문제를 해결하는 능력이다. 

이러한 임기응변, 집중력, 감각, 그리고 능력은 이미 알고있는 지식으로부터 나오는 것이 아니다. 

그것은 본질에 다가가기 위해서 감내해온 고통, 불면의 밤, 좌절, 환희, 이런 것으로 점철된 뜨거운 경험에서 나오는 것이다. 그래서 실력은 지식의 총합이 아니다. 고통의 총합이다.

여러분이 페이스북 타임라인을 보다가 누가 공유한 새로운 기술에 대한 링크를 저장했다고 하자. 

영원히 볼 일이 없는 글을 저장하는 행위는 쇼핑몰 사이트에서 위시리스트나 보관함에 마음에 드는 상품을 담는 심리와 정확히 일치한다. 즉, 그것은 공부가 아니라 쇼핑이다. 

쇼핑과 눈팅이 자체로 의미없는 일은 아니지만 그걸 공부로 착각하는 사람은 파편적인 지식의 늪에서 빠져나오기 어려울 것이다.


1. 지금 다니고 있는 회사에서 하는 일을 잘하기 위해서 노력하는 것이 가장 좋은 공부다.

2. 회사에서 하는 일과 개인적으로 공부하는 내용을 최대한 근접시키기 위해서 노력하라.

3. 새로운 기술을 익히는 최선의 방법은 스스로 문제를 정의한 다음, 새로운 기술을 이용해서 그 문제를 풀어보는 것이다. 책을 읽거나 동영상을 보는 것은 그보다 하위수준의 방법이다.

4. 신기술을 좇는 메뚜기가 되지 말라.

5. 모든 것을 알아야 한다는 강박을 버려라. 미리 획득하는 지식의 99%는 무용지물이다. 필요할 때 필요한 기술을 익힐 수 있는 것이 능력이다. 그 능력을 키워라.

6. 이상한 나라의 앨리스에 나오는 토끼굴(rabbit hole)을 피하라. 

카테고리이론을 알아야 함수형 언어를 쓸 수 있는게 아니고, 선형대수학을 공부해야 머신러닝을 할 수 있는게 아니다. 토끼굴에 빠져서 한없이 들어가다보면 비본질적인 공부에 시간을 허비하게 된다.

7. 겉만 핥는 것은 경박하지만 토끼굴에 빠지는 것은 우매하다. 둘 사이의 적당한 지점에서 균형을 잡는 것이 개발자의 능력이다.

8. 머리에 들어오지 않는 어려운 개념이나 용어는 자투리 시간을 이용해서 반복적으로 읽고 암기하라. 나중에 큰 그림을 공부할 때 도움이 된다.

9. 항상 겸손해야 하지만 동시에 자긍심을 가져라. 그대가 지금 작성한 코드, 지금 읽은 책, 지금 공부한 내용을 그대보다 잘 아는 사람은 지구상에 없다. 

모든걸 알고 있는 것처럼 보이는 다른 사람들도 그대와 마찬가지로 불안해하고, 위축되고, 두려워하면서 살아가고 있다. 자긍심이란 그런 타인을 돕고자 하는 마음가짐의 다른 이름이다.

10. 혼자 하지 말고 함께 공부하라.



혼자서 풀스택 개발자가 되어 보려고, 또는 최신트렌드가 어떻다 저렇다 라는 이야기만 듣고, 그걸로 게시판 만드는 수준 정도만 만들어보자.

이렇게 생각하고 집에와서 개인프로젝트로 환경을 세팅해서 작업해보고 했었는데요.

파이썬이고 node.js고 수박 겉햝기 정도의 지식만 알뿐, 이력서에 쓸때 경력으로 쓰기도 민망한 수준이더군요.

위에서 이야기 한데로, 너무 트랜드에 뒤처지지도 말아야겠지만 신기술 쫓는 메뚜기, 그리고 너무 토끼굴에 빠져서 정작 필요한 부분에 지식을 얻지 못하는 경우가 아닌가 생각이 들기도 합니다.



Posted by Joseph514
IT이야기/입코딩2017. 6. 15. 13:41

-[IT용어]루팅(Rooting)



안드로이드 폰에서 사용하는 루팅(Rooting)이라는 말을 알아보도록 하겠습니다.

보통 안드로이드 폰을 쓰다보면, 흔히들 루팅해서 작업할수 있다는 것들을 많이 봅니다.

안드로이드 공기계에 리눅스를 깔아보려고 하는데 루팅이 되어 있어야 되느니 마느니 하는 말들이 많아서 한번 찾아보았습니다.


단어를 뜯어보자면

root + ~ing. 

라는 뜻이군요.

이 말은 루트 권한이 원래 허가되지 않은 기기에서 루트 계정 권한을 취득하는 것입니다. 

오... 어디서 많이 들어본 단어군요.

root란 리눅스의 최고 관리자 권한입니다.

리눅스 계통의 운영체제에서는 루트권한 취득이 기본적으로 가능하지만, 이러한 루트권한을 획득하는 것을 막아놓아서 시스템에 함부로 접근할 수 없게 만든 기기에 대해서는 시스템의 보안 구멍 등을 통한 해킹을 통해 루트 권한을 획득하는 절차가 필요하게 됩니다. 

내가 휴대전화 관리자인데 내가 관리자 권한이 없다니 억울하기 짝이 없지 않습니까?

이러한 루팅이라는 말이 매우 잘 알려진 것은 안드로이드를 통해서일 것입니다.


iOS의 탈옥(jailbreaking)도 넓은 의미의 루팅이라 할 수도 있습니다. 

그런데 iOS의 경우에는 루트 권한을 얻지 않고 일부 시스템 파일의 조작이 가능한 경우가 많습니다.

리눅스나 유닉스나 그놈이 그놈 아닌가 했는데, iOS는 유닉스 계통입니다.(정확히는 유닉스-넥스트 스탭-Mac OS-OS X-iOS 로 이어집니다.)

리눅스에 비해 보안에 취약한 유닉스 계통이기 때문이라고 합니다.(어떻게 보면 더욱 개방적이라고도 볼 수도 있습니다.)


루팅만 한다고 해서 변하는 것은 루트 권한을 획득할 수 있다는것 하나이지만, 안드로이드 (리눅스)의 특성상 이것 하나가 큰 위력을 발휘하게 됩니다.


아래에는 나무위키에 등제된 루팅을 함으로 사용할수 있는 것들입니다.


1. 하드웨어의 성능 조절이 가능합니다.

오버클럭을 생각하면 된됩니다. 다만 커널이 지원해야 하고 순정커널이면 이런 기능이 없다고 합니다. 

실제로 스마트폰의 CPU의 클럭을 올려서, 본래 가진 성능보다 더 높게 쓰는 방법이 있고 반대로 클럭을 낮춰서 배터리 소모를 줄이는 방법이 있습니다. 

오버클럭을 한다고 해서 휴대폰이 항상 최대클럭으로 도는 것은 아니기 때문에 배터리 타임에는 큰 차이가 없다고 볼 수 있습니다. 

화면 OFF시 클럭다운 등 설정만 잘해준다면 고성능이 필요한 게임같은 경우 더 원활하게 사용하면서도 배터리 타임은 더 좋을 수도 있습니다. 

실제로 화면이 꺼졌을 때의 최대클럭을 낮게 잡아주면 대기시간의 배터리소모를 체감할 수 있을 정도로 크게 줄일 수 있습니다. 

또, CyanogenMod같은 커스텀 롬에는 시스템 I/O 스케쥴러를 설정할 수 있는데, 이 설정을 통해서도 최적화된 성능을 내게 할 수 있습니다. 

클럭별로 걸리는 전압을 낮춰 배터리 소모를 줄일 수도 있는데 너무 낮출 경우 프리징이 걸리거나 휴대폰이 그대로 뻗을 수 있으니 주의를 요망합니다.


2. 제작사나 통신사의 필수 프로그램 삭제가 가능합니다. 

통신사나 제조사에서는 현지화나 자신들의 이익을 앞세워 느린 프로그램을 지울 수 없게 설치하는 경우가 많습니다. 

옵티머스 Q의 한국형 프로그램이나 디자이어 HD의 마켓 프로그램 등이 이에 해당합니다. 

루팅을 하면 시스템의 모든 권한이 생기기 때문에 이러한 프로그램들을 지우고 기기를 좀 더 최적화시킬 수 있습니다. 

심지어는 구글에서 안드로이드에 끼워주는 기본 프로그램[GAPPS]들도 삭제가 가능합니다. 

쓸모 없는 시스템 앱은 비활성화하더라도 램을 좀먹는데, 이를 지워줌으로써 최적화를 이룰 수 있습니다. 

초창기 안드로이드 기기에서 그 효과가 극적으로 나타났으나, 신형 안드로이드 기기에서도 체감이 가능하다고 합니다.


3. 각종 알림음이나 폰트의 교체가 가능합니다. 

몇몇 기본으로 여러 폰트가 내장되어 있는 폰을 제외하면 나머지 폰들은 루팅을 하지 않으면 폰트 교체가 불가능합니다. 폰트 교체를 위해 루팅하는 유저도 많은 편입니다. 

다만 갤럭시 S 이후에 국내에 나온 몇몇 안드로이드 폰들은 자체적으로 폰트 변경을 지원합니다. 게다가 갤럭시S7 은 Samsung sans밖에 없습니다만 다른 글씨체들이 워낙 가독성이 구려서 그냥 기본으로 쓴다고 합니다. 

안드로이드는 기본적인 알림음, 문자음 등은 기본적으로 바꿀 수 있지만, 카메라 셔터음같은 경우 국내법에 의해 도촬 등을 막고자 셔터음이 강제로 납니다. 

이것도 루팅 후에 자유롭게 바꿀 수 있습니다.


4. 외장 메모리의 내장 메모리화가 가능합니다.

외장 메모리의 파티션을 나누고 나눈 파티션의 일부를 내장 메모리에 쓰이는 포맷으로 바꾸면 외장 메모리를 내장 메모리처럼 사용할 수 있습니다. 

더구나 안드로이드는 프로요 이전 기준으로 개발된 프로그램의 외장 메모리 설치가 지원되지 않습니다. 

위젯 프로그램같은 경우는 아예 내장에만 설치해야 합니다. 

그래서 이런식으로 파티션을 나눠 쓰면 용량 문제 해결에 큰 도움이 됩니다. 내장 메모리 용량이 작은 폰들의 경우 외장 메모리와 바꿔치기해서 쓰는 경우도 있습니다.


5. 각종 키 맵핑/기타등등을 사용할수 있습니다.

예를 들어 전원 버튼 말고 다른 버튼으로도 화면이 켜지게 할 수 있으며, 화면이 꺼졌을 때 볼륨 키를 두번 누르면 다음곡으로 넘어가게 할 수 있다든가, 트랙볼로 재생 중인 노래를 변경할 수 있게 하는 등 각종 키 맵핑으로 인해 많은 것을 할 수 있습니다. 

또한 host 파일을 수정해 특정 광고를 차단한다거나, 부팅애니메이션의 변경, 마켓의 국가별 차단 프로그램 해제, 각종 하드웨어 봉인 해제, 화면 녹화, 휴대폰 디스플레이의 색온도 조정, 스피커의 최대볼륨 부스팅, 라디오 모듈이 있는 모델의 경우 FM라디오 기능 설정, 하드웨어 키를 비활성화시키고 소프트웨어 키를 활성화, DNS조정으로 인한 각종 웹사이트/동영상 스트리밍의 속도향상 등 많은 것을 할 수 있다. 예를 들어 HTC의 태블릿 플라이어 4G의 경우 통화기능이 없지만 build.prop의 수정으로 전화기능을 활성화시킬 수 있습니다. 

홈 버튼과 관련된 문제도 해결할 수 있는데 가장 많이 쓰이는 경우는 안드로이드 계열 폰에서 많이 보이는 터치 버튼과 홈 버튼의 속도 차이,일명 홈딜레이를 해결하기 위해 쓰이는 경우. 루팅 후 시스템 내부를 직접 수정할 수 있는 프로그램을 이용해서 작업을 하는데 대부분은 인식을 담당하는 파일을 교체하는 수준에서 끝나지만 해당 모델의 패치된 파일이 없어서 직접 코드를 손대야 하는 경우도 있습니다.

무언가 엄청나게 많군요.

전자의 경우는 그나마 좀 쉽지만 후자의 경우 짤없이 주변에 있는 안드로이드 관련 개발자의 손을 빌려야 합니다. 함부로 코드 건들다가는 모든 게 맛이 가기 때문입니다. 


6. 보안을 우회하는 것이지만 OS차원에서 기본적으로 제공하지 않는 보안을 위해서도 사용됩니다. 

예를 들면 안드로이드 백신인 어베스트의 방화벽 기능에 필수이며, 도난방지 기능의 무력화를 완벽히 막는데도 필요합니다. 또한 특수한 프로그램을 통해 프로그램이 갖는 권한을 제작자가 정해준 그대로가 아니라 직접 통제해서 필요없어 보이거나 보안상 위협이 되는 권한을 차단할 수도 있습니다. 

안드로이드용 Tor가 모든 인터넷 연결에 대해 작동하게 할때도 필요합니다. 

부팅시에 추가적인 파일을 시스템에 불러올 수 있게 하는 Xposed framework의 등장으로 루팅만 되어있다면 롬 수준에서 갈아엎어야 추가가 가능했던 기능들의 추가가 가능해졌습니다. 

작게는 소소한 UI의 커스텀부터 모든 애플리케이션에 적용가능한 소형 창(멀티윈도우), 한손모드, 애플리케이션별로 UI, DPI, 클럭설정을 바꾼다든가 등 중에서 골라잡아 추가하는게 가능해집니다.


7. 외장 SD 카드 쓰기 권한 부여가 가능합니다. 

킷캣 이전의 안드로이드 버전 혹은 의견을 받아들여 정책이 개선된 것으로 알려진 롤리팝 이후 버전을 사용하는 유저들은 이게 무슨 소리냐고 받아들이겠지만, 킷캣 업데이트 이후 구글 기본앱을 제외한 서드파티 앱에서 외장 SD카드의 쓰기 권한이 박탈되었습니다. 

기본 앱 '내 파일'외의 다른 파일관리자 툴(ES 탐색기 등)에서 외장 SD의 파일을 삭제조차 불가능하며, 브라우저의 기본 다운로드 및 토렌트 등의 경로를 외장 SD로 설정하면 다운로드가 완전히 불가능합니다. 

어떤 식으로든 외장 SD 카드의 쓰기 권한을 요구하는 모든 작업 즉 파일을 옮길 때도, 사진 뷰어에서 사진을 지울 때도, 동영상 플레이어에서 폴더간 동영상 복사를 할 때도 극소수의 구글 공식 앱이 아니면 작동하지 않습니다. 

사실상 기본앱 사용 강제+클라우드로 끌어들입니다. 하지만 유저들이 착각하지 말아야 할게 애초에 안드로이드를 만드는 구글은 SD카드를 추가용량으로 활용하는 것을 지원한 적이 없습니다. 

안드로이드 유저들이 그걸 지원했다고 생각하는 이유는, 대개 제조사 커스텀으로 우회돼서 가능케 된 일종의 꼼수를 구글이 공식 지원한 것처럼 여기고 있기 때문입니다. 

구글이 원래 지원해 왔는데 킷캣에 와서 막았다고 생각하는건 틀린 것이라는 말이네요. 

순정을 쓰고 싶었으나 이 문제 때문에 울며 겨자 먹기로 루팅을 하게 되는 경우가 흔합니다. 루팅 후에는 시스템 구역의 xml 파일을 수정함으로서 간단히 해결 가능합니다.


그럼 이 많은 기능들을 하게 하기 위해서 루팅하려면 어떻게 해야 할까요?

루팅을 하는 방법은 크게 리커버리를 통하는 방법과 취약점을 이용하는 방법 두 가지로 나뉜다고 합니다. 


1. 리커버리를 통하는 방법

아예 안드로이드를 꺼 버리고 별도의 OS인 리커버리를 구동시켜서 저장장치에 접근한 뒤 슈퍼유저 바이너리를 설치하는 것으로, 부트로더 락만 걸려있지 않다면 안드로이드버전과 관계없이 가장 확실하게 루팅이 가능하나 약간 번거롭다는 단점이 있습니다. 


2. 취약점을 이용하는 방법

OS와 함께 켜져 있는 보안시스템을 휘저어서 뚫어버린 뒤 슈퍼유저 바이너리를 설치하는 것으로, 안드로이드의 버전에 따라 통하는 방법이 달라져서 루팅 이전에 사전지식이 약간 필요하며, 최신 버전의 안드로이드의 경우 취약점이 알려지기 전에는 이 방법으로 루팅하는 것이 불가능하다는 단점이 있습니다. 


최신 OS를 탑재하고 부트로더를 언락하기 쉬운 넥서스 계열의 폰은 전자의 방법이 주로 사용되며, 부트로더를 언락하기 어려운 제조사의 폰은 OS버전이 어떻든 간에 후자의 방법을 사용할 수 밖에 없습니다. 

루팅에 사용되는 취약점은 근본적으로 OS의 보안체계를 휘저어 놓는 취약점입니다. 다시 말해, 루팅툴이 개발됐다는 것은 그 기기의 보안이 완전히 날아갔다는 것과 다름없는 말입니다. 

어떤 앱이 취약점을 이용해서 사용자 모르게 루트 권한에 접근하고 시스템을 휘저어 놓는다면 OS 입장에서 그보다 더한 재앙은 없습니다. 

그러므로 구글과 제조사는 취약점을 막을 수 밖에 없는 것입니다. 

가장 이상적인 경우는 제조사에서 부트로더를 락을 걸지 않으면서 OS를 최신으로 맞춰 주면 루팅을 원하는 사용자는 루팅을 하고 그렇지 않은 사용자는 OS의 보안에 의해 보호받는 것이겠으나 현실은 루팅하다 벽돌돼서 AS센터를 찾는 사람이 한둘이 아니라 기업 입장에서는 손해만 보는 일입니다.



루팅할때 주의사항


하기전에 정말 루팅이 필요한지 잘 생각해보고 신중하게 결정해야 합니다. 

일단 보안상의 허점이 매우 많아집니다.(백신을 사용하면 되긴 하지만 사용자에 따라 보안수준은 달라집니다.) 따라서, 터치한번 잘못해서 바로 핸드폰이 고장나는 경우가 있습니다. 

여러 스마트폰 커뮤니티에 가보면 대개 루팅을 하지 않고 사용합니다. 

혹시 위에 써진 장점만 보고 호기심에 루팅할 생각을 하는 초보자들은 하지 않는 것을 권합니다. 

윈도우에서 최고 관리자 권한에 맘대로 접근 할 수 있던 정책때문에 여러 악성 프로그램에 허약했다는 것을 명심해야 할것입니다. 

슈퍼유저 앱과 바이너리를 꼭 제때 업데이트 하고, 루트 권한 허가 창이 뜰 때 마다 그냥 넘기지 말고 과연 이 앱이 정말로 루트 권한이 필요한 상황이라 띄우는 것인지 한번씩만 생각해주고 넘어가야 합니다.또한 루팅을 하면 제조사의 무상 AS가 불가능해집니다. 

심지어 구입한지 1달이 채 지나지 않더라도 루팅을 했다는것이 발견되면 바로 무상AS가 불가능해지며 심지어 일부 제조사는 유상AS마저 거부합니다. (모토로라가 이런 케이스) 

특히 커스텀롬을 설치하고 AS센터를 찾는 호갱님들은 AS를 받지 못한다고 합니다. 심지어 루팅하면 충전기 AS도 거부하는 경우도 있습니다. 하지만 이는 케바케가 좀 심한게 같은 기종을 수리받아도 루팅을 이유로 AS를 거부하는 경우와 루팅 여부에 별 관심없는 경우가 나뉘며, 심지어 루팅검사를 해보고도 주의만 주고 쿨하게 무상수리해주는 수리기사도 있습니다. 

AS를 장점으로 미는 삼성은 루팅에 관대한 경우가 많은 편이며 .용산에 있는 LG 전자도 가끔은 해준다고 합니다. 또한 기기에 따라 OTA를 받을 수 없습니다. 

공장초기화를 해도 루팅흔적이 남아있어 받을 수 없기 때문에 루팅흔적을 잘 지우지 못하겠다면 루팅 전 잘 생각해보아야 합니다. 물론 pc에 연결하면 업데이트 할 수 있긴 합니다.


루팅자체는 하드웨어의 수명에 영향이 절대로 없습니다. 루트권한에 대한 지식이 없는 유저가 처음에는 폰트나 알림 음을 바꾸는 수명에 영향이 없는 소극적인 커스터마이징을 하다가 갈수록 오버클럭같은 행위를 위험성조차 숙지하지 않고 시도하는 등 말 그대로 휴대폰을 혹사한다면 하드웨어 수명에 영향을 줄 수 있습니다. 

실제로 스마트폰을 어리숙하게 아는 좆문가들은 오버클럭 자체에 대한 이해가 없는 상태로 어? 속도가 빨라진다네? 오,좋은 거네?라는 식의 마인드로 오버클럭을 시도하는 경우가 많은데, 이 경우 휴대폰의 내부 기기 자체의 수명을 갉아먹을 수 있는 위험부담이 큰 행동이고, 성능이 좋은 컴퓨터도 권장하지 않는 방법입니다. 

게다가 검증되지 않은 프로그램들과 잘못된 오버클럭 방법을 쓰다 보니 오류가 범람하고 온갖 악질 프로그램들이 판을 치고 있습니다.


간혹 루팅하면 기기의 속도가 빨라진다고 착각하는 사용자도 존재합니다만 루팅은 관리자 권한을 획득하는 것으로 하드웨어의 속도와는 직접적인 관련이 없습니다. 

빨라지는 경우, 혹은 느려지는 경우는 루팅을 한 후에 시스템을 직접 변형한 이후, 예를 들자면 기본 앱을 지웠다거나, init.d/스크립트를 적용했다거나, 커스텀 리커버리를 통해 커스텀 커널을 올리는 등의 시스템 변형을 하는 경우에 생기는 일입니다. 그러니 쓸데없이 루팅해서 곤란한 일에 처하지 않는것이 좋겠죠.


자동차로 예로들면, 순정상태의 차량이 낼 수 있는 최대 속도가 정해져있다. 이를 리미트 라고 하는데 ECU를 조작하는 맵핑 튜닝으로 리미트를 해제 할 수 있게 됩니다. 

차량의 성능은 올라갑니다만 당연히 오버 성능을 했으므로 엔진 내구도는 심각하게 저하됩니다.


그리고 은행, 금융앱 등 보안에 극히 민감한 앱이나 주로 메이저한 게임회사의 앱들 중 상당수가 앱들이 루팅을 한 기기는 실행이 되지 않도록 방지하고 있어 언루팅 혹은 루팅 숨김을 하지 않는 이상 루팅 실행 방지 처리된 앱은 사용하지 못합니다.

SuperSU 또는 RootCloak 등 루팅 관리 앱에 숨김 기능이 있지만 이마저 잡아내는 앱 또한 적지 않습니다. 

곰돌라이트 커스텀 롬의 경우 컴퓨터 없이도 루팅/언루팅을 할수 있습니다.SuperSU에서 언루팅 기능으로 언루팅을 하여도 루팅 기기로 인식하여 실행을 거부하는 앱도 있습니다. 

대표적으로 SafetyNet을 사용하는 Pokémon GO. 이 때는 PC에 연결하여 온전한 순정 롬으로 되돌리는 수밖에 없습니다.



-루팅 제어용 프로그램

안드로이드에서 루팅여부를 확인할수 있는 가장 간단한 방법은 SuperUser 프로그램이 설치되어 있는지를 보는것입니다. 이 프로그램이 루트권한의 획득을 제어하기 때문에 사실상 루팅 그 자체라고 생각하는 경우가 많으나 사실은 그렇지 않습니다. 

SuperUser 프로그램은 su 바이너리와 같이 연동되어서 루트 권한을 취득하는데, su가 설치되기 위해서는 반드시 루팅툴이나 기타 보안 구멍을 통한 해킹을 통해 루트 권한을 획득하고 나서야 su를 설치할 수 있기 때문입니다. 

또는 리커버리에서 설치하여 루팅+바이너리 설치를 동시에 하는 방식도 있지만 의외로 이 방법을 모르는 사람이 많습니다. 이 프로그램이 없다고 하더라도 기술적으로 얼마든지 루트권한을 획득하고 파일을 조작하는 것이 가능하지만, SuperUser 프로그램은 다른 프로그램들로부터 요청되는 루트 권한을 보다 손쉽게 컨트롤 할 수 있게 도와줍니다. 

이렇게나 중요한 프로그램임에도 불구하고 특유의 아이콘 생김새때문에 바이러스로 오해하는 경우도 많고 실제로 백신 프로그램들은 SuperUser 프로그램을 바이러스라고 알려줍니다. 

한동안 관련 프로그램은 하나였다가 2011~2012 사이에 SuperSU가 새로 등장했는데, 안정성 향상 및 수시로 언루팅 상태로 바꿔줄 수 있는 기능에, 유료버전의 경우는 UAC와 같은 암호를 통한 권한제어를 최초로 제공하기 시작한 프로그램입니다. 

언젠가부터 유료기능을 간단한 설정변경으로 개방하는 것을 공식적으로 지원하고, CM팀과 XDA 사이의 문제로 인해, 2015년 현재 커스텀롬 기본 탑재 프로그램의 주류입니다. 국내의 경우는 국내 은행앱을 사용하기 위해 변경된 SPAPASU가 존재합니다.

ClockworkMod 개발자로 알려진 Koush가 또 다른 프로그램 Superuser를 만들었습니다. 

플레이스토어 링크. 이 프로그램은 오픈소스이며, 소스는 github에 공개했습니다. 

그래서 그런지는 몰라도 CyanogenMod롬과 대부분의 롬에는 아예 설정 자체에 Superuser가 메뉴로 넣어져있는 경우가 많습니다.

이러한 루팅 제어용 프로그램들은 각종 루팅 비권장 프로그램들의 좋은 타겟이 되곤 합니다. 

즉 핸드폰의 루팅 여부를 이 프로그램이 있느냐 없느냐만으로 확인하는것으로 이 프로그램이 있다면 루팅폰으로 판단하여 서비스 제공을 거부하는 형식입니다. 

주로 단말기 인증이 필요한 몇몇 프로그램과, 돈이 오가는 금융 프로그램 및 인터넷 쇼핑 프로그램등이 이런 방법을 사용하는데, 이건 말 그대로 프로그램의 유무만 체크하는 것이라서 루팅 없이 제어 프로그램만 있어도 루팅폰으로 취급하여 서비스 제공을 거부합니다. 

위에서 언급했듯이 국내 은행앱을 사용하기 위해 변경된 SPAPASU를 이용한 임시 언루팅으로 많은 유저들이 인터넷 뱅킹을 이용하고 있습니다.


-기타

안드로이드의 루팅은 SDK등의 개발도구나 프로그램을 통해서 이뤄집니다. 

Bootloader를 언락하지 않았다면, 약관을 어긴것은 아니고 자국도 안남기 때문에 언루팅하여 일반 폰 처럼 A/S를 받는 것이 가능하다고 합니다. 

그렇다 하더라도 루팅의 절차가 간단한 것은 아니며, 소위 말하는 벽돌이 될 확률도 있습니다. 

루팅 전에 충분히 절차를 숙지하고, 복구 방법을 정확히 알아둔 후, 중요한 데이터의 백업이 이뤄진 상태에서 할 수 있도록 해야 합니다. 

되도록 첫 루팅 시도는 주변의 경험자에게 부탁하여 같이 해보는걸 추천 하기도 합니다.


xda-developers

위 사이트는 HTC 팬 사이트에서 시작된 스마트폰 관련 커뮤니티 사이트입니다. 스마트폰뿐만 아니라 태블릿 컴퓨터도 취급하네요. 주요한 활동은 스마트폰에 대한 토론, 정보 공유, 커스텀 롬 개발, 애플리케이션 개발 등등입니다. 

이 사이트는 거의 모든 세계공용기종을 밑바닥인 커널, 드라이버, 리커버리, 드물게는 컴퓨터의 BIOS나 UEFI에 해당하는 부분인 부트로더까지의 수준까지 취급합니다. 

최신 세대의 듀얼코어 이상에 안드로이드 4.0 이상 전용으로 만들어진 센스 4 이후버전을 매끄럽진 않지만 공식적으로 4.0 업데이트도 되지 않은 싱글코어 기기에서 구동하도록 손보거나 커스텀 커널을 통해 클럭을 2배나 그 이상으로 뻥튀기할 수 있는, 말 그대로 B급을 싸제 수준으로 바꿔줄 수 있는 곳입니다.

영어로 되어있지만 다양한 정보들이 많네요.


마지막으로 안드로이드 루팅자체가 불법이라고 오해하는 사람들이 있는데, 결론부터 말하면

루팅은 불법 행위가 아니라고 합니다.

우선 안드로이드 자체가 오픈소스이며 제조사별로 커널소스나 부트로더소스 같은 중요 영역을 공개하고 있는 상태입니다. 모든 루팅은 이 영역의 허점을 이용합니다. 라이센스의 특성상 오픈소스를 뚫어서 바꾸는 것은 저작권법에도 아무런 문제가 없습니다.

루팅은 불법이라고 아는 사람들이 많은것 같더군요.

저도 이번에 알게 된 건데 우선 저작권법 제124조 제2항을 보면 알겠지만 안드로이드는 오픈소스이고 그것을 변경하는 것이기 때문에 '저작권 그 밖에 보호되는 권리의 기술적 보호조치'가 아니다는 것입니다.

애초에 리눅스 자체가 아파치 라이센스로 적용받으며, 오픈소스입니다. 

즉, 법적으로는 아무 문제가 없습니다. 그렇지만, 약관 위반은 맞기 때문에, 루팅을 하다가 벽돌폰이 되는 등의 문제가 발생되었을때, 무상 A/S를 거부당할 수 있는것 입니다.


루팅 프로그램 목록

-CF Auto Root

-framaroot

-gingerbreak

-kingoroot

-lg one click root

-nexus root toolkit

-stump root

-superoneclick

-tegrak kernel

-towelroot

-z4root

-Baiduroot

-iroot



-출처 : 나무위키, 본인생각

Posted by Joseph514
세상이야기2017. 6. 9. 10:07

-60세에 처음 컴퓨터를 써본 할머니는 81세의 나이로 아이폰 앱을 개발했다

원문보기

일본에 사는 와카미야 마사코는 81세의 나이로 앱 개발자가 됐다.

"

와카미야는 21년 전, 수십 년간 몸담았던 은행에서 정년 은퇴했다. 일을 그만두고 일상이 지루해진 그는 어느 날 잡지에서 "컴퓨터가 있다면 당신은 집에서 한 걸음도 내딛지 않고도 사람들과 대화할 수 있다"는 글을 읽게 됐고, 곧바로 컴퓨터를 충동구매했다. 하지만 후회는 없었다. 이 충동구매가 "은퇴 후의 삶을 완전히 바꿔놨기 때문"이다.

컴퓨터에 금방 익숙해진 것도 아니었다. 구매한 지 3개월이 지나고서야 컴퓨터를 완벽히 세팅할 수 있었다. 와카미야는 이후 엑셀 사용법을 익혀 패턴 아트를 하는 등 컴퓨터 사용을 늘려나갔다. 그러다 스마트폰을 접하게 됐다. 로켓뉴스24에 따르면 그는 6달간 앱 프로그래밍을 공부한 끝에 '히나단'이라는 아이폰용 앱을 만들 수 있었다.

"

그녀는 어머니 간병 때문 21년 전 40년간 근무한 은행을 했다고 합니다. 집안에만 머물다 보니 친구를 만나기 어려웠기에 PC를 구매했다고 합니다. 그리고 그녀는 온라인 모임에 가입해 컴퓨터 사용법을 독학했다고 합니다. 

타자 치는 법을 익히고 그림을 그리는 방법도 배웠습니다. 

이후 노인층을 대상으로 한 '멜로우 클럽' 사이트를 만들며 인터넷과 IT 세계에 눈을 떴으며, 노인 대상 컴퓨터 교육 교재를 만들고 홈페이지를 개설했다고 합니다.

맥 PC를 구입하고 앱 개발 프로그래밍 언어 '스위프트(Swift)'를 독학하여 '히나단(Hinadan)'이라는 아이폰 게임 앱을 하나 만들었습니다. 

이 하나단이라는 게임은 노인도 쉽게 즐길 수 있는, 일본 전통 인형을 화면에 보이는 단에 진열하는 게임입니다. 

젊은 사람들이 만든 게임은 손동작이 느린 노인들에게 재미가 없으며, 노인용 게임 앱을 제작해 달라고 얘기했지만 아무도 관심을 가져주지 않았기에 직접 만들었다고 합니다.


참,, 대단하지 않을 수 없네요.

요즘은 100세 시대라고 하지요. 예전이면 60에 퇴직하여 남은 여생을 즐기는 그런 나이였겠지만, 요즘은 무엇이든 공부하고 배워야 할 것 같네요.

저는 요 몇년전부터 익혀온 안드로이드 앱 좀 만들고, 웹사이트 좀 만든다고 생각했었는데, 맥용 프로그래밍도 공부해보고, 꾸준히 공부하고 새로운 지식들도 배워나가야할거같습니다.

Posted by Joseph514
메모장2017. 5. 11. 15:21

이제 5월 종합소득세를 신고하는 달이군요.


종합소득이 있는 사람은 다음해 5월 1일부터 5월 31일(성실신고확인 대상 사업자는 6월 30일)까지 종합소득세를 신고·납부하여야 합니다. 

- 종합소득 : 이자·배당·사업(부동산임대)·근로·연금·기타소득 


구글링해보면 좋은 글들도 많지만, 보통 세무사님께서 상담해 주신다는 내용들이 많군요.


만약 사업자등록 프로그래머라면 수십만원이 들더라도 세무사를 통해서 해야겠지만, 작년 경험에 의하면 

사업자 등록을 하지 않은 원천징수 프리랜서 개발자의 경우는 그렇게 소득이나 재산이없는 경우 얼마 안나왔던 걸로 기억나더군요.

전 세금에 관해서는 젬병입니다. 참고사항이시지 다양한케이스가 많고, 만약 세금이 너무 많이 나온다 싶으면 전문가에게 문의해보시길 바랍니다.


저는 이번에도 홈택스를 통해서 한번 신고해보았습니다.


3.3% 원천징수 프리랜서외에 4대보험 빠지는 정직원이나, 사업자등록을 한 프로그래머는 저와 신청방법이 다를것입니다. 나름 좀 삽질하다가 신청했는데, 다른분들도 참고하시라고 올려봅니다.


홈텍스로 가기


홈택스에서 신고하려면 가입은 필수입니다.

종소세 신고 기간에는 찾기쉽게 신고바로가기 버튼이 화면 어딘가에 있을 겁니다.


일반신고서->정기신고작성을 클릭합니다.


납세자의 생년월일을 입력한다음 조회해서 정보를 불러오고, 신고및 기장의무 안내를 클릭합니다.

팝업이 뜨면 불편하지만, 신고안내유형, 기장의구분, 추계신고시 적용경비율, 수입금액내역을 다 적어둡니다.

이렇게 자동으로 입력되어 주면 좋은데, 나중에 따로 입력해야 하더군요.



다음으로 진행합니다.

쭉쭉쭉 진행하다가 사업소득 원천징수 내역불러오기를 클릭합니다.


중간에 파견업체에서 세금 납부 잘하고 있는지 확인하고 선택하여 적용하기를 누릅니다.




쭉쭉쭉 가다보면 종합소득세 신고가 마무리됩니다.

사실 프로그래머는 해당되는 사항이 많이 없기에 별로 입력할게 없더군요.

영수증 가지고 어떻게 처리하면 돌려받을수 있는지는 모르겠지만, 경비 처리가 별로 안된다고 들었습니다.

그리고 사업소득의 경우는 카드사용이나, 현금영수증 같은거 아무 쓸모가 없습니다.


일단 저는 40만원 좀 넘게 환급을 받는다고 뜨네요.


만약 -가 붇으면 환급을 받고 그냥 금액이 나오면 납부를해야합니다.


본인의 은행계좌를 적으면 나중에 처리후 입금되며 연락을 줍니다.


조금이라도 불안하거나, 세금을 많이 내야할거 같으면 전문가의 손길이 필요할거 같습니다만 고만고만하게 돈 내거나 받는거면 그냥 홈택스를 이용하시는것도 나쁘지는 않을거같네요..

Posted by Joseph514